home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 8 / Revista CD Expert nº 08 CD1.iso / Utilitarios / Programacao / MS-DOS Interrupt List / inter60a / INTERRUP.C < prev    next >
Text File  |  1999-01-03  |  354KB  |  9,302 lines

  1. Interrupt List, part 3 of 18
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999 Ralf Brown
  3. --------O-1510-------------------------------
  4. INT 15 - VMiX - "sys_virtual" - EXECUTE CONFORMING FUNCTION IN PROTECTED MODE
  5.     AH = 10h
  6.     STACK:    DWORD    pointer to function
  7.           N WORDs    function args
  8. Return: AX = function's return value??? (not specified in documentation)
  9. Note:    while the function is executing, the following global descriptors are
  10.       available:
  11.         20h stack segment
  12.         38h code segment of function
  13.         40h data alias for function's code segment
  14.       additional GDT descriptors can be allocated using AH=02h with
  15.       function "assign gdt"
  16. SeeAlso: AH=02h"VMiX",AH=51h"VMiX"
  17. --------T-1510-------------------------------
  18. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE
  19.     AH = 10h
  20.     AL = semaphore number (00h-3Fh)
  21. Return: AH = status
  22.         00h semaphore not in use
  23.         01h semaphore owned by another task
  24.         02h invalid semaphore number
  25.         03h semaphore owned by caller
  26. SeeAlso: AH=02h"MultiDOS",AH=0Dh"MultiDOS",AH=1Dh"MultiDOS"
  27. --------Q-151000-----------------------------
  28. INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
  29.     AX = 1000h
  30. Return: after other processes run
  31. Note:    under DESQview, if the process issuing this call has hooked INT 08h,
  32.       the current time-slice is set to expire at the next clock tick rather
  33.       than immediately
  34. SeeAlso: AH=00h"MultiDOS",AX=5305h,INT 21/AH=89h,INT 21/AH=EEh"DoubleDOS"
  35. SeeAlso: INT 2F/AX=1680h,INT 60/DI=0106h,INT 62/AH=01h,INT 6F/AH=2Ah"F_YIELD"
  36. SeeAlso: INT 7A/BX=000Ah,INT 7F/AH=02h"MultiLink",INT 7F/AH=E8h
  37. --------Q-151001-----------------------------
  38. INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  39.     AX = 1001h
  40.     BX = number of bytes to allocate
  41. Return: ES:DI -> block of memory or 0000h:0000h (DV v2.26+)
  42.     AX = status (DV v2.42)
  43.         0000h successful
  44.         0001h failed
  45. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  46.       common memory.  Under DV v2.42, this call never generates a user
  47.       prompt regardless of the SETERROR value; instead, it always returns
  48.       AX=0001h and ES:DI=0000h:0000h if out of memory
  49. SeeAlso: AX=1002h,AX=102Eh,AX=DE0Ch,AX=DE15h
  50. --------Q-151002-----------------------------
  51. INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  52.     AX = 1002h
  53.     ES:DI -> previously allocated block
  54. Return: block freed
  55. SeeAlso: AX=1001h,AX=DE0Dh
  56. --------Q-151003-----------------------------
  57. INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
  58.     AX = 1003h
  59.     BH = attribute
  60.     BL = character
  61.     DX = segment of object handle for window
  62. Return: nothing
  63. Note:    BX=0000h does not display anything, it only positions the hardware
  64.       cursor to the logical cursor's current position
  65. --------Q-1510-------------------------------
  66. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  67.     AH = 10h
  68.     AL = 04h thru 12h
  69. Return: pops up "Programming error" window in DV 2.x
  70. --------Q-151013-----------------------------
  71. INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
  72.     AX = 1013h
  73.     ES:DI -> FAR service routine
  74. Return: BX = bit mask indicating which bit was allocated
  75.         0000h if no more bits available
  76. SeeAlso: AX=1014h,AX=1015h
  77. Note:    only a few TopView/DESQview API calls are allowed during a hardware
  78.       interrupt; if other calls need to be made, the interrupt handler
  79.       must schedule a 2nd-level interrupt with "SETBIT" (AX=1015h)
  80. --------Q-151014-----------------------------
  81. INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
  82.     AX = 1014h
  83.     BX = bit mask from INT 15/AX=1013h
  84. Return: nothing
  85. SeeAlso: AX=1013h,AX=1015h
  86. --------Q-151015-----------------------------
  87. INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
  88.     AX = 1015h
  89.     BX = bit mask for interrupts to post
  90. Return: indicated routines will be called: (DV 2.0x) at next task switch
  91.                        (DV 2.2x) immediately on return from
  92.                              hardware interrupt
  93. Notes:    this is one of the few TopView calls which are allowed from a hardware
  94.       interrupt handler
  95.     the handler will be called with ES containing the segment of the handle
  96.       of the next task to be executed; on return, ES must be the segment of
  97.       a task handle
  98. SeeAlso: AX=1013h,AX=1014h
  99. --------Q-151016-----------------------------
  100. INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
  101.     AX = 1016h
  102.     ES:DI = possible object handle
  103. Return: BX = status
  104.         FFFFh if ES:DI is a valid object handle (see #00414)
  105.         0000h if ES:DI is not
  106. Note:    under DESQview versions prior to 2.50, an object handle is always a
  107.       pointer to the object; for versions 2.50 and up, only task handles
  108.       are always pointers--other handles may consist of a unique object
  109.       number and offset into DESQview's common memory (see #00423)
  110. SeeAlso: AX=DE14h,AX=DE2Bh,AX=DE2Ch
  111.  
  112. (Table 00413)
  113. Values for DESQview object type:
  114.  00h    window/task
  115.  01h    mailbox
  116.  02h    keyboard
  117.  03h    timer
  118.  04h    pointer
  119.  05h    panel
  120.  06h    objectq
  121.  
  122. Format of DESQview object:
  123. Offset    Size    Description    (Table 00414)
  124.  00h    WORD    offset in common memory of previous object of same type
  125.  02h    WORD    offset in common memory of next object of same type
  126.  04h    WORD    signature FEDCh (DV 2.42-)
  127.         signature FEDCh or object number (DV 2.50+)
  128.  06h    WORD    object type (see #00413)
  129.  08h    DWORD    object handle to return to caller
  130.  0Ch    DWORD    canonicalized object address (segment = common memory)
  131.  10h    WORD    offset in common memory of owning task
  132.         (0000h for unowned OBJECTQs)
  133.  12h    WORD    mapping context
  134.         offset in common memory of mapping context record (see #00416)
  135.     remainder varies by object type and DESQview version
  136. ---v2.42 keyboard object---
  137.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  138.         bit 15: keyboard opened
  139.  16h  4 BYTEs    ???
  140.  1Ah    WORD    priority in OBJECTQ???
  141.  1Ch    ...
  142.  25h    WORD    offset in common memory of ??? task
  143.  27h  4 BYTEs    ???
  144. ---v2.42 objectq object---
  145.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  146.         bit 15: OBJECTQ opened
  147.  16h  2 BYTEs    ???
  148.  18h    WORD    offset in common memory of ??? task
  149.  1Ah  6 BYTEs    ???
  150. ---v2.42 mailbox object---
  151.  14h    WORD    flag bits (see also AH=12h/BH=0Ah"OBJECT")
  152.         bit 15: mailbox opened
  153.  1Ah    WORD    priority in OBJECTQ???
  154.  1Ch  6 BYTEs    ???
  155.  22h    WORD    offset in common memory of mailbox name (counted string)
  156.         0000h if no name
  157.     <= 5 BYTEs    ???
  158. ---v2.22-2.42,2.52,2.60 window/task object---
  159.  14h    BYTE    00h window, 01h task
  160.  15h    BYTE    internal (not Switch menu) window number???
  161.  16h    BYTE    internal (not Switch menu) window number???
  162.  17h    WORD    segment of internal window record (see #00417)
  163.  19h  2 BYTEs    ???
  164.  1Bh    BYTE    cursor row
  165.  1Ch    BYTE    cursor column
  166.  1Dh    BYTE    visible window origin, row
  167.  1Eh    BYTE    visible window origin, column
  168.  1Fh    BYTE    window height (logical)
  169.  20h    BYTE    window width (logical)
  170.  21h    BYTE    window position, row
  171.  22h    BYTE    window position, column
  172.  23h    BYTE    window height (visible)
  173.  24h    BYTE    window width (visible)
  174.  25h    BYTE    row of top of frame (or window if unframed)
  175.  26h    BYTE    column of left of frame (or window if unframed)
  176.  27h    BYTE    window height (physical, including frame)
  177.  28h    BYTE    window width (physical, including frame)
  178.  29h    BYTE    unzoomed visible origin, row (00h before first zoom)
  179.  2Ah    BYTE    unzoomed visible origin, column (00h before first zoom)
  180.  2Bh    BYTE    unzoomed window position, row (00h before first zoom)
  181.  2Ch    BYTE    unzoomed window position, column (00h before first zoom)
  182.  2Dh    BYTE    unzoomed window height (00h before first zoom)
  183.  2Eh    BYTE    unzoomed window width (00h before first zoom)
  184.         unzoomed parameters above are updated when window is zoomed
  185.           to full screen
  186.  2Fh    BYTE    ??? initially logical window height
  187.  30h    BYTE    ??? initially logical window width
  188.  31h  2 BYTEs    ???
  189.  33h    BYTE    minimum height of window
  190.  34h    BYTE    minimum width of window
  191.  35h    BYTE    maximum height of window
  192.  36h    BYTE    maximum width of window
  193.  37h  3 BYTEs    ???
  194.  3Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  195.  42h 24 BYTEs    attributes???
  196.  5Ah  8 BYTEs    window frame characters: ul,ur,ll,lr,t,b,l,r
  197.  62h  3 BYTEs    ???
  198.  65h    BYTE    ??? bitflags
  199.  66h    BYTE    bit 0: window is zoomed
  200.  67h    BYTE    ???
  201.  68h    WORD    offset in common memory of window name or 0000h if untitled
  202.  6Ah    WORD    length of window name
  203.  6Ch  2 BYTEs    ???
  204.  6Eh    WORD    offset of logical cursor in window (in character cells)
  205.  70h    DWORD    pointer to field table for window
  206.  74h    BYTE    ???
  207.  75h  2 BYTEs    ???
  208.  77h    BYTE    number of last-visited field
  209.  78h    DWORD    pointer to field table entry for last-visited field
  210.  7Ch  3 BYTEs    ???
  211.  7Fh    BYTE    select field marker character
  212.  80h    BYTE    ??? bit flags
  213.         bit 0: allow ECh window stream opcode to change reverse logattr
  214.         bit 1: alternate field processing mode selected
  215.  81h    BYTE    ???
  216.  82h    DWORD    notification function (manager stream opcode 8Ah)
  217.         no notification if segment = 0000h
  218.  86h    DWORD    notification argument (manager stream opcode 8Bh)
  219.  8Ah    WORD    offset in common memory of ??? window object or 0000h
  220.  8Ch    WORD    offset in common memory of ??? window object or 0000h
  221.  8Eh    WORD    offset in common memory of ??? window object or 0000h
  222.  90h    BYTE    ??? bitflags
  223.  91h    BYTE    ???
  224.  ---task object only
  225.  92h    BYTE    bit flags (bits 0-4)
  226.  93h    BYTE    character for ??? (default 20h)
  227.  94h    BYTE    ??? flag
  228.  95h    WORD    offset in common memory of ???
  229.  97h  2 BYTEs    ???
  230.  99h    WORD    ???
  231.  9Bh    BYTE    ??? bit flags
  232.         bit 3: ???
  233.         bit 6: perform protected-attribute processing on select fields
  234.  9Ch    BYTE    ???
  235.  9Dh    WORD    offset in common memory of current register save record
  236.           (see #00415).    No register save record in use if < 01C0h
  237.  9Fh    WORD    offset in common memory of task's keyboard object
  238.  A1h    WORD    offset in common memory of task's OBJECTQ object
  239.  A3h    WORD    offset in common memory of task's mailbox object
  240.  A5h    WORD    semaphore: FFFFh if on user stack, else on task's private stack
  241.  A7h    DWORD    user's SS:SP
  242.  ABh    WORD    task's private SP (SS read from offset 0Ah)
  243.  ADh  6 BYTEs    ???
  244.  B3h    BYTE    ??? bit flags
  245.         bit 0: run in foreground only
  246.  B4h    BYTE    ???
  247.  B5h    BYTE    ??? bitflags
  248.  B6h    BYTE    task status (see #00555 at AX=DE2Ch)
  249.  B7h  9 BYTEs    ???
  250.  C0h    WORD    head pointer for keyboard buffer (wraps back to 00h after 80h)
  251.  C2h    WORD    tail pointer for keyboard buffer (wraps back to 00h after 80h)
  252.  C4h  2 BYTEs    ??? (0000h)
  253.  C6h    WORD    segment of keyboard buffer for task
  254.  C8h    WORD    offset in common memory of ??? keyboard object
  255.  CAh    BYTE    ???
  256. ---v2.22-2.42
  257.  CBh    WORD    offset in common memory of ??? object
  258.  CEh    BYTE    ??? flag
  259.  CFh    WORD    offset in common memory of default notify window for task
  260.           or 0000h if none
  261.  D1h  4 BYTEs    ???
  262.  D5h    BYTE    window number on Switch Window menu
  263.  D6h  5 BYTEs    ???
  264.  DBh    WORD    offset in common memory of ??? object
  265.  DDh  2 BYTEs    ???
  266.  DFh    WORD    API level for task
  267.  E1h    WORD    offset in common memory of object task is waiting on if task
  268.           status is 'waiting', else 0000h
  269.  E7h    WORD    segment of ???
  270.  E9h 4    BYTEs    ???
  271.  EDh    WORD    EMS handle of virtualization buffer, 0000h if no virtualization
  272.  F1h 12 BYTEs    ???
  273.  FBh    WORD    ???
  274.  FDh    BYTE    ???
  275.  FFh 12 BYTEs    ???
  276. 10Bh    DWORD    pointer to process record (see #00418,#00419)
  277. 10Dh 10 BYTEs    ???
  278. 119h    DWORD    SS:SP for ???
  279. 11Dh  4 BYTEs    ???
  280. 121h    DWORD    pointer to ???
  281. 125h 25 BYTEs    ???
  282. 13Eh    DWORD    pointer to ??? in system memory
  283. ---v2.22
  284. 142h  3 BYTEs    ???
  285. 145h        task's default keyboard object
  286. ---v2.42
  287. 142h    DWORD    pointer to first task instance data record in system memory
  288. 148h    DWORD    pointer to last task instance data record in system memory
  289.         (see #00420)
  290. 14Ah    BYTE    ???
  291. 14Dh 42 BYTEs    task's default keyboard object
  292. 177h 32 BYTEs    task's ObjectQ object
  293. 197h 41 BYTEs    task's default mailbox object
  294. 1C0h 24 BYTEs    first register save record
  295. 450h    --    default top of private stack
  296. ---v2.52 (probably all DV/X)
  297. Same as v2.60 below except there is an extra 29 bytes inserted somewhere
  298.   before offset 9Fh, but not yet known exactly where.  Also, for the WAIT_ON
  299.   field (v2.60 offset E3h), some X apps (probably waiting on a socket) have
  300.   0000h even when waiting.
  301. ---v2.60
  302.  CBh    WORD    ??? (added in 2.50 - rest is same as 2.42)
  303.  CDh    WORD    offset in common memory of ??? object
  304.  D0h    BYTE    ??? flag
  305.  D1h    WORD    offset in common memory of default notify window for task
  306.           or 0000h if none
  307.  D3h  4 BYTEs    ???
  308.  D7h    BYTE    window number on Switch Window menu
  309.  D8h  5 BYTEs    ???
  310.  DDh    WORD    offset in common memory of ??? object
  311.  DFh  2 BYTEs    ???
  312.  E1h    WORD    API level for task
  313.  E3h    WORD    If status at B6h=waiting, offset in common memory of object
  314.           that task is waiting on, else 0000h. (Task with CPU also
  315.           has 0000h here)
  316.  E9h    WORD    segment of ???
  317.  EBh 4    BYTEs    ???
  318.  EFh    WORD    EMS handle of virtualization buffer, 0 if no virtualization
  319.  F3h 12 BYTEs    ???
  320.  FDh    WORD    ???
  321.  FFh    BYTE    ???
  322. 101h  8 BYTEs    ???
  323. 109h    DWORD    pointer to process record in system memory
  324. 10Dh 14 BYTEs  ???
  325. 11Bh    DWORD    SS:SP for ???
  326. 11Fh  4 BYTEs    ???
  327. 123h    DWORD    pointer to ???
  328. 127h 25 BYTEs    ???
  329. 140h    DWORD    pointer to ??? in system memory
  330. 144h    DWORD    pointer to first task instance data record in system memory
  331. 148h    DWORD    pointer to last task instance data record in system memory
  332.         (from INT 15/AX=DE27h) (see #00420)
  333. 14Ch    BYTE    ???
  334. 14Eh 42 BYTEs    task's default keyboard object
  335. 179h 32 BYTEs    task's ObjectQ object
  336. 199h 41 BYTEs    task's default mailbox object
  337. 1C2h 24 BYTEs    first register save record
  338. 452h    --    default top of private stack
  339.  
  340. Format of DESQview Register Save Record:
  341. Offset    Size    Description    (Table 00415)
  342.  00h    WORD    AX
  343.  02h    WORD    BX
  344.  04h    WORD    CX
  345.  06h    WORD    DX
  346.  08h    WORD    DI
  347.  0Ah    WORD    SI
  348.  0Eh    WORD    DS
  349.  10h    WORD    ES
  350.  12h    DWORD    return address
  351.  16h    WORD    original flags
  352.  
  353. Format of DESQview mapping context record:
  354. Offset    Size    Description    (Table 00416)
  355.  00h    WORD    lowest segment in process's memory
  356.         (often start of system memory chain)
  357.  02h    WORD    size of process's memory in paragraphs
  358.  04h    BYTE    flag: 00h if process swapped out, 01h otherwise
  359.  05h    BYTE    flag: 00h if allocated in conventional memory, 01h if EMS
  360.  06h  2 BYTEs    ???
  361.  08h    WORD    EMS handle if in EMS, else 0
  362.  0Ah  2 BYTEs    ??? (nonzero if system memory resides in shared mem???)
  363.  0Ch    WORD    segment of system memory block that contains process record,
  364.           referenced from segment of start of system memory chain
  365.  0Eh    BYTE    ???
  366.  0Fh    WORD    size of system memory block that contains process record
  367.           and DOS memory in paragraphs
  368.  11h    BYTE    bit flags
  369.         Bit 0: Swapped out???
  370.         Bit 1: ???
  371.         Bit 2: Swapped out???
  372.  12h    BYTE    ???
  373.  13h    BYTE    reference count
  374.  ---v2.31
  375.  14h 10 BYTEs    ???
  376.  1Eh    WORD    segment of process record
  377.  20h  2 BYTEs    ???
  378.  22h    WORD    segment of ???    (in first free system memory block???)
  379.  24h    WORD    segment of end of system memory chain
  380.  26h    WORD    segment of start of system memory chain
  381.  28h  8 BYTEs    ???
  382.  2Ah    DWORD    pointer to ??? (process record???)
  383.  2Dh 10 BYTEs    ???
  384.  37h    BYTE    lowest interrupt vector to save on context switch
  385.  38h    BYTE    highest interrupt vector to save on context switch
  386.  39h    WORD    offset in common memory of main task with this context
  387.  3Ah 12 BYTEs    ???
  388.  46h    BYTE    internal mapping context number
  389.  47h 12 BYTEs    ???
  390.  ---v2.5x-2.60
  391.  14h  6 BYTEs    ???
  392.  1Ah    WORD    segment of process record
  393.  1Ch  2 BYTEs    ???
  394.  1Eh    WORD    segment of first free system memory block
  395.  20h    WORD    segment of start of system memory chain
  396.  22h    WORD    segment of end of system memory chain
  397.  24h 8    BYTEs    ???
  398.  2Ch    DWORD    pointer to ??? (1 segment into process record???)
  399.  30h 3    BYTEs    ???
  400.  33h    WORD    Offset in common memory of main task with this context
  401.  35h 7    BYTEs    ???
  402.  3Ch    BYTE    internal mapping context number
  403.  3Dh 14 BYTEs    ???
  404.  4Bh    WORD    first DOS memory segment (first MCB segment+1)
  405.  4Dh    BYTE    ??? (flag???)
  406.  ---v2.53 (2.5x???)
  407.  4Eh 12 BYTEs    ???
  408.  ---v2.60
  409.  4Eh    WORD    segment of script buffer (see #00421)
  410.  50h  6 BYTEs    ???
  411.  
  412. Format of DESQview Internal Window Record (v2.31-2.60):
  413. Offset    Size    Description    (Table 00417)
  414.  00h    BYTE    internal window number???
  415.  01h    BYTE    display page???
  416.  02h    BYTE    video mode
  417.  03h  3 BYTEs    ???
  418.  06h    BYTE    logical window height
  419.  07h    BYTE    logical window width
  420.  08h    DWORD    pointer to text video buffer
  421.  0Ch 116 BYTEs    ???
  422.  
  423. Format of DESQview process record (v2.31):
  424. Offset    Size    Description    (Table 00418)
  425. -470h 13 BYTEs    filename of ??? Script
  426. -463h 1117 BYTEs ??? (script buffer???)
  427.  -6h  6 BYTEs    ???
  428.  00h    WORD    segment of parent PSP in process
  429.  02h  5 BYTEs    ???
  430.  07h    WORD    segment of current PSP in process
  431.  09h    WORD    segment of first MCB in process
  432.  0Bh 13 BYTEs    ???
  433.  18h 1024 BYTEs process's interrupt vector table
  434. 418h 376 BYTEs    ???
  435. 590h        first MCB in process
  436. SeeAlso: #00419
  437.  
  438. Format of DESQview process record (v2.52-v2.60) (probably also 2.5x):
  439. Offset    Size    Description    (Table 00419)
  440.  00h 28 BYTEs    EXE header of last EXE, ??? if last program run was COM
  441.  1Ch ??? BYTEs    overwritten with ASCIZ filename of last program run (EXE/COM)
  442. 11Ch    WORD    segment of parent PSP in process
  443. 11Eh  4 BYTEs    ???
  444. 122h    WORD    segment of current PSP
  445. 124h    WORD    segment of current PSP
  446. 126h    WORD    segment of first MCB in process
  447. 128h  4 BYTEs    ???
  448. 12Ch    DWORD    pointer to first process instance data record in system memory
  449. 130h    DWORD    pointer to last process instance data record in system memory
  450.         (from INT 15/AX=DE27h) (see #00420)
  451. 134h  8 BYTEs    ???
  452. 13Ch    WORD    size of current environment
  453. 13Eh    WORD    segment of current environment
  454. 140h    WORD    segment of current PSP
  455. 142h    DWORD    entry point of current program
  456. 146h 10 BYTEs    ???
  457. ---v2.52 (v2.5x???)
  458. 150h    BYTE    ???
  459. 151h    WORD    segment of parent PSP in process
  460. 153h    WORD    ???
  461. 155h    WORD    ???
  462. 157h    WORD    ???
  463. 159h  4 BYTEs    ???
  464. 15Dh    WORD    segment of current environment
  465. 15Fh    WORD    segment of current PSP
  466. 161h    WORD    segment of ???
  467. 162h    WORD    ???
  468. 164h  3 BYTEs    ???
  469. 168h 1024 BYTEs process's interrupt vector table
  470. 568h 120 BYTEs    ???
  471. 5E0h        first MCB in process
  472. ---v2.60
  473. 150h    WORD    segment of parent PSP in process
  474. 152h    WORD    ???
  475. 154h    WORD    ???
  476. 156h    WORD    ???
  477. 158h  4 BYTEs    ???
  478. 15Ch    WORD    segment of current environment
  479. 15Eh    WORD    segment of current PSP
  480. 160h    WORD    segment of ???
  481. 162h    WORD    ???
  482. 164h 1024 BYTEs process's interrupt vector table
  483. 564h 108 BYTEs    ???
  484. 5D0h        first MCB in process
  485. SeeAlso: #00418
  486.  
  487. Format of DESQview task or process instance data record (v2.5x???, v2.60):
  488. Offset    Size    Description    (Table 00420)
  489.  00h    DWORD    pointer to next record of same type or 00000000
  490.  04h    DWORD    pointer to previous record of same type or 00000000
  491.  08h    DWORD    pointer to source area of memory during restore state
  492.  0Ch    WORD    number of bytes to save/restore
  493.  0Eh    DWORD    pointer to destination area of memory during restore state
  494.  12h    WORD    ??? (0)
  495.  14h  N BYTEs    source memory buffer during restore state
  496.  
  497. Format of DESQview script buffer (v2.60):
  498. Offset    Size    Description    (Table 00421)
  499.  00h 13 BYTEs    ASCIZ Script filename
  500.  0Dh 80 BYTEs    ???
  501.  5Eh  N BYTEs    script records (see #00422)
  502.  
  503. Format of one DESQview script record (v2.60):
  504. Offset    Size    Description    (Table 00422)
  505.  00h    BYTE    signature 12h
  506.  01h 18 BYTEs    blank-padded script name
  507.  13h    BYTE    ASCII code of key attached to script or 0 if non-ASCII key
  508.  14h    BYTE    scan code of key attached to script if non-ASCII, else 0
  509.  15h    BYTE    ???
  510.  16h    WORD    size of script in bytes
  511.  18h  N    BYTEs    script (ASCII code of each keystroke; if 0, next byte is
  512.           scan code of non-ASCII key)
  513. SeeAlso: #00421
  514.  
  515. Format of DESQview Common Memory Header (v2.31-2.60):
  516. Offset    Size    Description    (Table 00423)
  517.  00h    WORD    offset of lowest used block
  518.  02h    WORD    bytes of commom memory, including header
  519.  04h    WORD    offset of first free block
  520.  06h  N BYTEs    size depends of DV version, ??? (DVP buffer???)
  521. Note:    the above is located at the beginning of the commom memory segment
  522. SeeAlso: #00424,#00425,#00433
  523.  
  524. Format of DESQview Free block header:
  525. Offset    Size    Description    (Table 00424)
  526.  00h    WORD    size of block in bytes including header
  527.  02h    WORD    offset of next free block
  528.  04h  N BYTEs    free block
  529. SeeAlso: #00423,#00425
  530.  
  531. Format of DESQview Used block header:
  532. Offset    Size    Description    (Table 00425)
  533.  00h    WORD    size of block in bytes including header
  534.  02h  N BYTEs    used block
  535. SeeAlso: #00423,#00424
  536. --------Q-151017-----------------------------
  537. INT 15 - TopView - UNIMPLEMENTED IN DV 2.x
  538.     AX = 1017h
  539. Return: pops up "Programming error" window in DV 2.x
  540. --------Q-151018-----------------------------
  541. INT 15 - TopView - "LOCATE" - FIND WINDOW AT A GIVEN SCREEN LOCATION
  542.     AX = 1018h
  543.     BH = column
  544.     BL = row
  545.     ES = segment of object handle for window below which to search
  546.         0000h = start search with topmost window
  547. Return: ES = segment of object handle for window which is visible at the
  548.            indicated position, or covered by indicated window
  549.         0000h if no window
  550. SeeAlso: AX=1023h,AX=1024h
  551. --------Q-151019-----------------------------
  552. INT 15 - TopView - "SOUND" - MAKE TONE
  553.     AX = 1019h
  554.     BX = frequency in Hertz (0000h = silence)
  555.     CX = duration in clock ticks (18.2 ticks/sec)
  556. Return: immediately, tone continues to completion
  557. Notes:    if another tone is already playing, the new tone does not start until
  558.       completion of the previous one.  Up to 32 tones may be queued before
  559.       the process is blocked until a note completes.
  560.     in DV 2.00, the lowest tone allowed is 20 Hz
  561.     if CX = 0, the current note is cancelled; if BX = 0 as well, all queued
  562.       notes are also cancelled
  563. SeeAlso: AH=82h"HUNTER",INT 16/AH=73h
  564. --------Q-15101A-----------------------------
  565. INT 15 - TopView - "OSTACK" - SWITCH TO TASK'S INTERNAL STACK
  566.     AX = 101Ah
  567. Return: stack switched
  568. Notes:    this call may not be nested; a second call must be preceded by a call
  569.       to "USTACK" (AX=1025h)
  570.     while TopView requires many API calls to be executed while on the
  571.       task's internal stack, DESQview allows those calls to be executed
  572.       regardless of the current stack
  573. SeeAlso: AX=1025h
  574. --------Q-15101B-----------------------------
  575. INT 15 - TopView - "BEGINC" - BEGIN CRITICAL REGION
  576.     AX = 101Bh
  577. Return: task-switching temporarily disabled
  578. Notes:    will not task-switch until "ENDC" (AX = 101Ch) called unless task
  579.       voluntarily releases the CPU (upon regaining the CPU, task-switching
  580.       will again be disabled)
  581.     suspends the caller until DOS is free
  582. SeeAlso: AH=0Dh"MultiDOS",AX=101Ch,AX=DE13h,AX=DE1Ch,INT 2F/AX=1681h
  583. SeeAlso: INT 60/DI=0602h
  584. --------Q-15101C-----------------------------
  585. INT 15 - TopView - "ENDC" - END CRITICAL REGION
  586.     AX = 101Ch
  587. Return: task-switching enabled
  588. Note:    this API call may be made from within a hardware interrupt handler
  589. SeeAlso: AX=101Bh,AX=DE13h,AX=DE1Bh,INT 2F/AX=1682h,INT 60/DI=0603h
  590. --------Q-15101D-----------------------------
  591. INT 15 - TopView - "STOP" - STOP TASK
  592.     AX = 101Dh
  593.     ES = segment of object handle for task to be stopped
  594.         (== handle of main window for that task)
  595. Return: indicated task will not get any CPU time until restarted with AX=101Eh
  596. Note:    once a task has been stopped, additional "STOP"s are ignored
  597. BUG:    in DV 2.00, this function is ignored unless the indicated task is the
  598.       current task
  599. SeeAlso: AX=101Eh,AX=102Bh,AH=12h"VMiX",INT 21/AH=81h
  600. --------Q-15101E-----------------------------
  601. INT 15 - TopView - "START" - START TASK
  602.     AX = 101Eh
  603.     ES = segment of object handle for task to be started
  604.         (== handle of main window for that task)
  605. Return: indicated task is started up again
  606. Note:    once a task has been started, additional "START"s are ignored
  607. SeeAlso: AX=101Dh,AX=102Bh,INT 21/AH=82h
  608. --------Q-15101F-----------------------------
  609. INT 15 - TopView - "DISPEROR" - POP-UP ERROR WINDOW
  610.     AX = 101Fh
  611.     BX = bit fields
  612.         bits 0-12: number of characters to display
  613.         bits 13,14: which mouse button may be pressed to remove window
  614.              00 = either
  615.              01 = left
  616.              10 = right
  617.              11 = either
  618.         bit 15: beep if 1
  619.     ES:DI -> text of message
  620.     CH = width of error window (0 = default)
  621.     CL = height of error window (0 = default)
  622.     DX = segment of object handle
  623. Return: BX = status: 1 = left button, 2 = right, 27 = ESC pressed
  624. Note:    window remains on-screen until ESC or indicated mouse button is pressed
  625. --------Q-151020-----------------------------
  626. INT 15 - TopView - UNIMPLEMENTED IN DV v2.00+
  627.     AX = 1020h
  628. Return: pops up "Programming error" window in DV v2.00+
  629. --------Q-151021-----------------------------
  630. INT 15 - TopView - "PGMINT" - INTERRUPT ANOTHER TASK
  631.     AX = 1021h
  632.     BX = segment of object handle for task to interrupt (not self)
  633.     DX:CX -> FAR routine to jump to next time task is run
  634. Return: nothing
  635. Notes:    the FAR routine is entered with the current ES, DS, SI, DI, and BP
  636.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  637.       needs to be preserved
  638.     multiple PGMINTs to a single task are processed last-in first-out
  639.     if the other task is in a DOS or DV API call, the interruption will
  640.       occur on return from that call
  641. --------Q-151022BX0000-----------------------
  642. INT 15 - TopView - "GETVER" - GET VERSION
  643.     AX = 1022h
  644.     BX = 0000h
  645. Return: BX nonzero, TopView or compatible loaded
  646.     (BL = major version, BH = minor version)
  647. Notes:    TaskView returns BX = 0001h, DESQview v2.00+ returns BX = 0A01h
  648. --------Q-151023-----------------------------
  649. INT 15 - TopView - "POSWIN" - POSITION WINDOW
  650.     AX = 1023h
  651.     BX = segment of object handle for parent window within which to
  652.            position the window (0 = full screen)
  653.     ES = segment of object handle for window to be positioned
  654.     DL = general window position (see #00426)
  655.     CH = number of columns to offset from position specified by DL
  656.     CL = number of rows to offset from position specified by DL
  657. Return: nothing
  658.  
  659. Bitfields for TopView general window position:
  660. Bit(s)    Description    (Table 00426)
  661.  0,1    horizontal position
  662.     00 = current, 01 = center, 10 = left, 11 = right
  663.  2,3    vertical position
  664.     00 = current, 01 = center, 10 = top, 11 = bottom
  665.  4    don't redraw screen if set
  666.  5-7    not used
  667. --------Q-151024-----------------------------
  668. INT 15 - TopView - "GETBUF" - GET VIRTUAL SCREEN INFO
  669.     AX = 1024h
  670.     BX = segment of object handle for window (0000h = use default)
  671. Return: ES:DI -> virtual screen
  672.     CX = size of virtual screen in bytes
  673.     DL = screen type
  674.         00h text screen
  675.         01h graphics screen
  676. SeeAlso: INT 10/AH=FEh,INT 21/AH=2Bh/CX=4445h
  677. --------Q-151025-----------------------------
  678. INT 15 - TopView - "USTACK" - SWITCH BACK TO USER'S STACK
  679.     AX = 1025h
  680. Return: stack switched back
  681. Notes:    call only after having switched to internal stack with AX=101Ah
  682.     while TopView requires many API calls to be executed while on the
  683.       task's private stack, DESQview allows those calls to be executed
  684.       regardless of the current stack
  685. SeeAlso: AX=101Ah
  686. --------Q-1510-------------------------------
  687. INT 15 - DESQview (TopView???) - UNIMPLEMENTED IN DV 2.x
  688.     AH = 10h
  689.     AL = 26h thru 2Ah
  690. Return: pops up "Programming error" window in DV 2.x
  691. --------Q-15102B-----------------------------
  692. INT 15 - DESQview v2.00+ (TopView???) - "POSTTASK" - AWAKEN TASK
  693.     AX = 102Bh
  694.     BX = segment of object handle for task
  695. Return: nothing
  696. Note:    forces a task which is waiting on its objectq to continue by placing
  697.       the handle for the task on the objectq
  698. SeeAlso: AX=101Dh,AX=101Eh,INT 21/AH=82h
  699. --------Q-15102C-----------------------------
  700. INT 15 - DESQview v2.00+ - "NEWPROC" - START NEW APPLICATION IN NEW PROCESS
  701.     AX = 102Ch
  702.     ES:DI -> contents of .PIF/.DVP file (see #00427)
  703.     BX = size of .PIF/.DVP info
  704. Return: BX = segment of object handle for new task
  705.         0000h on error
  706. SeeAlso: AX=DE24h,INT 21/AH=4Bh
  707.  
  708. Format of .PIF/.DVP file:
  709. Offset    Size    Description    (Table 00427)
  710.  00h    BYTE    reserved (0)
  711.  01h    BYTE    checksum of bytes 02h through 170h
  712.  02h 30 BYTEs    blank-padded program title
  713.  20h    WORD    maximum memory to allocate to partition in KB
  714.  22h    WORD    minimum memory required in KB
  715.  24h 64 BYTEs    ASCIZ program pathname
  716.  64h    BYTE    default drive letter ('A',...)
  717.  65h 64 BYTEs    ASCIZ default directory name
  718.  A5h 64 BYTEs    ASCIZ program parameters
  719.  E5h    BYTE    initial screen mode (0-7) (also see offset 189h)
  720.  E6h    BYTE    number of text pages used
  721.  E7h    BYTE    number of first interrupt to save
  722.  E8h    BYTE    number of last interrupt to save
  723.  E9h    BYTE    rows in virtual screen buffer
  724.  EAh    BYTE    columns in virtual screen buffer
  725.  EBh    BYTE    initial window position, row
  726.  ECh    BYTE    initial window position, column
  727.  EDh    WORD    system memory in KB
  728.  EFh 64 BYTEs    ASCIZ shared program name
  729. 12Fh 64 BYTEs    ASCIZ shared program data file
  730. 16Fh    BYTE    program flags 1 (see #00428)
  731. 170h    BYTE    flags2
  732.         bit 6: uses command-line parameters in field at A5h
  733.         bit 5: swaps interrupt vectors
  734. ---information unique to .DVP files---
  735. 171h  2 BYTEs    keys to use on open menu
  736. 173h    WORD    size of script buffer in bytes
  737. 175h    WORD    automatically give up CPU after this many tests for keyboard
  738.           input in one clock tick (default 0 = never)
  739. 177h    BYTE    nonzero = "uses own colors"
  740. 178h    BYTE    nonzero if application swappable
  741. 179h  3 BYTEs    reserved (0) according to Quarterdeck documentation
  742.         in actual .DVP files, frequently 01h
  743. 17Ch    BYTE    nonzero to automatically close on exit (see also #00430)
  744. 17Dh    BYTE    nonzero if copy-protect floppy is required
  745. ---information unique to DESQview 2.0+---
  746. 17Eh    BYTE    .DVP version number
  747.         00h DESQview v1.2+
  748.         01h DESQview v2.0+
  749.         02h DESQview v2.2+
  750. 17Fh    BYTE    reserved (0)
  751. 180h    BYTE    initial number of rows in physical window
  752. 181h    BYTE    initial number of columns in physical window
  753. 182h    WORD    maximum expanded memory to allow, in KB
  754. 184h    BYTE    DVP program flags 3 (see #00429)
  755. 185h    BYTE    keyboard conflict level (0-4 for DV<2.26, 00h-0Fh for DV2.26+)
  756.         (see #00431)
  757. 186h    BYTE    number of graphics pages used
  758. 187h    WORD    extra system memory size
  759. 189h    BYTE    initial screen mode (FFh = default) (overrides offset E5h)
  760. ---information unique to DESQview 2.2+---
  761. 18Ah    BYTE    serial port usage
  762.         FFh uses all serial ports
  763.         00h no serial ports
  764.         01h only COM1
  765.         02h only COM2
  766. 18Bh    BYTE    DVP program flags 4 (see #00430)
  767. 18Ch    BYTE    protection level for 386 machines
  768. 18Dh 19 BYTEs    reserved (0) for regular DESQview
  769. ---information unique to DESQview/X 1.0---
  770. 18Dh    BYTE    X flags
  771.         bits 3-7: unused (0)
  772.         bit 2: don't display wait message when opening window
  773.         bit 1: don't display DOS window
  774.         bit 0: (XNEWPROC) use DOS client layer (DOS-to-X)
  775.                (NEWPROC) inherit DOS client layer usage
  776. 18Eh    BYTE    X keyboard behavior (0-3)
  777. 18Fh    BYTE    font scaling
  778.         00h fixed fonts
  779.         01h scalable fonts
  780. 190h 10 BYTEs    reserved (0)
  781. 19Ah    WORD    length of data follownig XDVP signature
  782. 19Ch  4 BYTEs    signature "XDVP"
  783. 1A0h  N BYTEs    list of variable length records (see #00432)
  784.  
  785. Bitfields for .PIF/.DVP program flags 1:
  786. Bit(s)    Description    (Table 00428)
  787.  7    writes text directly to screen
  788.  6    runs in foreground only (see also #00427 offset 184h)
  789.  5    uses math coprocessor
  790.  4    accesses system keyboard buffer directly
  791.  3-1    reserved (0)
  792.  0    swappable
  793. SeeAlso: #00427,#00429,#00430
  794.  
  795. Bitfields for .DVP program flags 3:
  796. Bit(s)    Description    (Table 00429)
  797.  7    automatically assign window position
  798.  5    maximum memory value has been specified
  799.  4    disallow "Close" command
  800.  3    foreground-only when doing graphics
  801.     set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  802.  2    don't virtualize (see also #00430)
  803.  1    foreground-only during DOS calls
  804.     set by DV 2.3+ when "Runs in Background" = "D" (undoc)
  805. SeeAlso: #00427,#00428,#00430
  806.  
  807. Bitfields for .DVP program flags 4:
  808. Bit(s)    Description    (Table 00430)
  809.  7    automatically close application on exit if .COM or .EXE    specified
  810.     (see also #00427 offset 17Ch)
  811.  6    swappable if not using serial ports
  812.  5    start program with window hidden (v2.26+)
  813.  4    start program in background (v2.26+)
  814.  3    virtualize text (see also #00429)
  815.  2    virtualize graphics (see also #00429)
  816.  1    share CPU when foreground
  817.  0    share EGA when foreground and zoomed
  818. SeeAlso: #00427,#00428,#00429
  819.  
  820. Bitfields for DESQview keyboard conflict level:
  821. Bit(s)    Description    (Table 00431)
  822.  3    save/restore entire INT 09 handler state every taskswtch
  823.  2    take special precautions for programs which read the BIOS keyboard
  824.       buffer directly from memory
  825.  1    never indicate keystroke available during scripts/xfers
  826.  0    only indicate keystroke available every sixth poll
  827. SeeAlso: #00427
  828.  
  829. Format of DESQview/X variable length record:
  830. Offset    Size    Description    (Table 00432)
  831.  00h    WORD    length of following record, 0000h if end of record list
  832.  02h    BYTE    record type
  833.         01h script filename, up to 64 characters
  834.         02h command-line parameters (allows >64 characters on cmdline)
  835.         03h environment inheritance
  836.         04h environment string
  837.         05h starting window position
  838. ---types 01h,02h,04h---
  839.  03h  N BYTEs    ASCII data
  840. ---type 03h---
  841.  03h    BYTE    inheritance
  842.         00h do not inherit
  843.         01h inherit environment
  844. ---type 05h---
  845.  03h  N BYTEs    ASCII copy of fields as typed into DVPMAN, separated by commas:
  846.         starting row, starting column, starting height, starting width
  847. Note:    if there are multiple occurrences of record types 01h, 02h, or 03h,
  848.       only the last instance of each type is used; multiple occurrences of
  849.       type 04h are concatenated
  850. SeeAlso: #00427
  851. --------Q-15102D-----------------------------
  852. INT 15 - DESQview v2.00+ - "KMOUSE" - KEYBOARD MOUSE CONTROL
  853.     AX = 102Dh
  854.     BL = subfunction
  855.         00h determine whether using keyboard mouse
  856.         Return: BL = 00h using real mouse
  857.                  01h using keyboard mouse
  858.         01h turn keyboard mouse on
  859.         02h turn keyboard mouse off
  860. SeeAlso: INT 33/AX=0024h
  861. --------Q-15102E-----------------------------
  862. INT 15 - DESQview v2.40+ - ALLOCATE SYSTEM MEMORY
  863.     AX = 102Eh
  864.     BX = number of bytes
  865. Return: AX = status
  866.         0000h successful
  867.         ES:DI -> allocated system memory (see #00433)
  868.         0001h failed
  869.         ES:DI = 0000h:0000h
  870. Note:    under DV 2.42, this call is identical to AX=1001h
  871. SeeAlso: AX=1001h,AX=1002h,AX=DE0Ch
  872.  
  873. Format of DESQview system memory block header:
  874. Offset    Size    Description    (Table 00433)
  875.  00h    WORD    segment of next header or 0000h
  876.  02h    WORD    segment of previous header or 0000h
  877.  04h    WORD    size of block in paragraphs, including header
  878.  06h    BYTE    availability flag (00h in use, 01h free)
  879. Note:    this header is located one paragraph before the memory block proper
  880. SeeAlso: #00423
  881. --------Q-1511-------------------------------
  882. INT 15 - TopView commands
  883.     AH = 11h
  884.     AL = various (except 17h)
  885. Return: varies by function
  886. Note:    in DESQview 2.x, these function calls are identical to AH=DEh, so
  887.       see those below
  888. SeeAlso: AX=DE00h,AX=DE22h,AX=DE30h
  889. --------T-1511-------------------------------
  890. INT 15 - VMiX - "sys_system" - EXECUTE SHELL SYSTEM COMMANDS
  891.     AH = 11h
  892.     STACK:    DWORD    pointer to ASCIZ string containing a VMiX shell
  893.             request (max len = 127)
  894. Return: AX = status (SYS_OK or SYS_ERROR)
  895. SeeAlso: AH=0Ch"VMiX"
  896. --------T-1511-------------------------------
  897. INT 15 - MultiDOS Plus - TURN OFF AltZ TOGGLE
  898.     AH = 11h
  899. Note:    disables the Alt-Z MultiDOS command/program-selection hotkey
  900. SeeAlso: AH=12h"MultiDOS"
  901. Index:    hotkeys;MultiDOS Plus
  902. --------Q-151117BX0000-----------------------
  903. INT 15 - DESQview v2.20+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  904.     AX = 1117h
  905.     BX = 0000h    get current mapping context without setting
  906.          nonzero    set new mapping context
  907. Return: BX = mapping context in effect before call
  908.     interrupts enabled
  909. Notes:    this function differs from AX = DE17h for DESQview v2.20 through 2.25
  910.     mapping contexts determine conventional-memory addressability; setting
  911.       a mapping context ensures that the associated program and data areas
  912.       are in memory for access.  Usable by drivers, TSRs and shared
  913.       programs.
  914.     caller need not be running under DESQview, but must ensure that the
  915.       stack in use will not be mapped out by the call
  916. SeeAlso: AX=DE17h,INT 2F/AX=1685h
  917. --------m-1511DE-----------------------------
  918. INT 15 - DESQview - QEXT.SYS - INSTALLATION CHECK
  919.     AX = 11DEh
  920. Return: CF clear if installed
  921.         AX = segment at which QEXT.SYS is located
  922. Desc:    QEXT.SYS is Quarterdeck's HMA manager for DESQview; more recent
  923.       versions also implement the XMS standard
  924. Note:    a private entry point (see #00434) may be found by searching the
  925.       beginning of the returned segment for the signature string
  926.       "QUARTERDECK EXTENDED MEMORY MANAGER 286"; the word immediately
  927.       prior to the signature contains the QEXT version number in BCD,
  928.       and the word prior to that contains the offset within the QEXT
  929.       code segment of the private entry point
  930. SeeAlso: INT 2F/AX=4310h"XMS",INT 67/AH=3Fh
  931.  
  932. (Table 00434)
  933. Call QEXT.SYS private entry point with:
  934.     AH = 00h ???
  935.     AH = nonzero ???
  936. --------T-1512-------------------------------
  937. INT 15 - VMiX - "sys_sleep" - PUT PROCESS TO SLEEP
  938.     AH = 12h
  939.     STACK:    WORD    process ID
  940. Return: AX = status (SYS_OK or SYS_ERROR)
  941. SeeAlso: AH=03h"MultiDOS",AX=101Dh,AH=13h"VMiX"
  942. --------T-1512-------------------------------
  943. INT 15 - MultiDOS Plus - TURN ON AltZ TOGGLE
  944.     AH = 12h
  945. Note:    enables the Alt-Z MultiDOS command/program-selection hotkey
  946. SeeAlso: AH=11h"MultiDOS"
  947. Index:    hotkeys;MultiDOS Plus
  948. --------Q-1512--BH00-------------------------
  949. INT 15 - TopView - SEND MESSAGE - "HANDLE" - RETURN OBJECT HANDLE
  950.     AH = 12h
  951.     BH = 00h
  952.     BL = which handle to return
  953.         00h handle in DWORD on top of stack
  954.         01h current task's window handle
  955.         02h given task's mailbox handle (task's handle on stack)
  956.         03h current task's mailbox handle
  957.         04h given task's keyboard handle (task's handle on stack)
  958.         05h current task's keyboard object handle
  959.         06h given task's OBJECTQ handle (task's handle on stack)
  960.         07h current task's OBJECTQ handle
  961.         08h      \
  962.           thru > return 0000:0000 under DV < 2.26
  963.         10h      /
  964.         0Ch (2.26+) task owning object with handle in DWORD on top of stack
  965.         0Dh (2.26+) task handle of owner (parent) of current task
  966. Return: DWORD on top of stack is object handle
  967. Note:    BL=0Ch,0Dh returns 00000000h if the object is not open (keyboard,
  968.       mailbox, panel, pointer, and timer objects) or is an orphan (task,
  969.       window)
  970. SeeAlso: AH=12h/BH=02h,AH=12h/BH=80h
  971. --------Q-1512--BH01-------------------------
  972. INT 15 - TopView - SEND MESSAGE - "NEW" - CREATE NEW OBJECT
  973.     AH = 12h
  974.     BH = 01h
  975.     BL = object type to create (see #00435)
  976.     STACK: (only if window object or WINDOW class)
  977.            DWORD address to jump to (no new task if high word == 0)
  978.            DWORD (reserved) 0 = non-task window, FFFFh = task window
  979.            DWORD bytes for task's private stack (FFFFh == default of 0100h)
  980.            DWORD bytes system memory for input buffer for READ/READN
  981.             (0 == none, -1 == default--same as logical window size)
  982.            DWORD window size, columns
  983.            DWORD window size, rows
  984.            DWORD length of window title
  985.            DWORD address of window title
  986. Return: DWORD on top of stack is new object handle
  987. Notes:    if a new task is created, it is started with
  988.       AX = BX = SI = DI = BP = 0
  989.       DX:CX = handle of parent task
  990.       DS = ES = SS = segment of private stack (and new task's handle)
  991.     new windows are orphans, inherit the colors/hidden status of the
  992.       creating task's window, and are placed in the upper left hand corner
  993.       of the screen but not automatically redrawn
  994.     new keyboards are closed, and have all object bits cleared except for
  995.       the hardware cursor bit
  996. SeeAlso: AH=12h/BH=02h,AH=12h/BH=81h
  997.  
  998. (Table 00435)
  999. Values for TopView/DESQview object type (for creation):
  1000.  00h    (DV 2.0x only) handle is DWORD on top of stack
  1001.  01h    (DV 2.0x only) use task's window handle
  1002.  02h    (DV 2.0x only) given task's mailbox (task's handle on stack)
  1003.  03h    (DV 2.0x only) current task's mailbox
  1004.  04h    (DV 2.0x only) given task's keyboard (task's handle on stack)
  1005.  05h    (DV 2.0x only) current task's keyboard object
  1006.  08h    WINDOW class
  1007.  09h    MAILBOX class
  1008.  0Ah    KEYBOARD class
  1009.  0Bh    TIMER object (counts down 32-bit time in 10ms increments)
  1010.  0Fh    POINTER object
  1011.  10h    PANEL object
  1012. --------Q-1512--BH02-------------------------
  1013. INT 15 - TopView - SEND MESSAGE - "FREE" - FREE AN OBJECT
  1014.     AH = 12h
  1015.     BH = 02h
  1016.     BL = object
  1017.         00h handle in DWORD on top of stack
  1018.         window: close window and free
  1019.         timer: free timer
  1020.         panel: free panel object
  1021.         pointer: free pointer
  1022.         01h task's window handle - kills task, never returns
  1023.         02h given task's mailbox (task's handle on top of stack)
  1024.         03h current task's mailbox
  1025.         04h given task's keyboard (task's handle on top of stack)
  1026.         05h current task's keyboard object
  1027. Return: STACK popped if handle passed on stack
  1028. Notes:    when a window is freed, its keyboard and pointer objects are freed;
  1029.       task windows also free any mailbox, objectq, and panel objects held
  1030.       by the task and any child tasks
  1031.     if the keyboard being freed is the default keyboard for a task, this
  1032.       call is equivalent to CLOSE
  1033.     panel and pointer objects are automatically closed if open
  1034. SeeAlso: AH=12h/BH=01h,AH=12h/BH=0Dh,AH=12h/BH=82h
  1035. --------Q-1512--BH03-------------------------
  1036. INT 15 - TopView - SEND MESSAGE - "ADDR" - GET HANDLE OF MESSAGE SENDER
  1037.     AH = 12h
  1038.     BH = 03h
  1039.     BL = object
  1040.         00h mailbox handle in DWORD on top of stack
  1041.         02h sender of last msg read from mailbox (task's handle on stack)
  1042.         03h sender of last msg read from current task's mailbox
  1043. Return: DWORD on stack is task handle of message sender
  1044. SeeAlso: AH=12h/BH=00h,AH=12h/BH=83h
  1045. --------Q-1512--BH03-------------------------
  1046. INT 15 - DESQview v2.26+ - "CONNECT" - CONNECT TWO WINDOWS
  1047.     AH = 12h
  1048.     BH = 03h
  1049.     BL = window to be connected
  1050.         00h handle of window to be attached in DWORD on top of stack
  1051.         01h attach current task's main window
  1052.     STACK: DWORD handle of window to attach to or 00000000h to detach
  1053. Return: STACK popped
  1054. Notes:    when two windows are connected, both will move if the user moves either
  1055.     multiple windows may be attached to a single window, but each window
  1056.       may only be attached to one window at a time
  1057. SeeAlso: AH=12h/BH=83h
  1058. --------Q-1512--BX0300-----------------------
  1059. INT 15 - TopView - SEND MESSAGE - "DIR" - GET PANEL FILE DIRECTORY
  1060.     AH = 12h
  1061.     BX = 0300h
  1062.     STACK: DWORD handle of panel object (see #00436)
  1063. Return: STACK: DWORD length of directory (always multiple of 14 bytes)
  1064.            DWORD address of directory
  1065. Note:    a null string is returned if the object is not open
  1066. SeeAlso: AH=12h/BX=0400h"APPLY",AH=12h/BH=83h
  1067.  
  1068. Format of TopView panel file:
  1069. Offset    Size    Description    (Table 00436)
  1070.  00h  2 BYTEs    C0h C3h
  1071.  02h    BYTE    number of panels in file
  1072.  03h    for each panel in file:
  1073.         8 BYTEs  blank-padded panel name
  1074.           DWORD  panel offset in file
  1075.           WORD   panel length
  1076.     data for panels (each consists of one or more window/query/manager
  1077.       streams); first byte of each panel must be 1Bh, fifth byte must be
  1078.       E5h
  1079. --------Q-1512--BH04-------------------------
  1080. INT 15 - TopView - SEND MESSAGE - "READ" - READ NEXT LOGICAL LINE OF WINDOW
  1081.     AH = 12h
  1082.     BH = 04h
  1083.     BL = window to read from
  1084.         00h handle is DWORD on top of stack
  1085.         01h use calling task's default window
  1086.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1087.         0Dh (DV 2.26+) default window of parent task of current task
  1088. Return: STACK:    DWORD number of bytes read
  1089.         DWORD address of buffer
  1090. Notes:    reading starts at the current logical cursor position; the cursor is
  1091.       updated to point at the character following the last one read
  1092.     any translucent blanks (FFh) which are visible on screen are changed
  1093.       to the character which is seen through them
  1094.     the string produced by the read is placed in an input buffer which may
  1095.       be reused by the next READ or READN of a window
  1096.     window stream opcodes D8h and D9h determine whether the read returns
  1097.       characters or attributes
  1098. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=12h,AH=12h/BH=84h
  1099. --------Q-1512--BH04-------------------------
  1100. INT 15 - TopView - SEND MESSAGE - "READ" - GET NEXT RECORD FROM OBJECT
  1101.     AH = 12h
  1102.     BH = 04h
  1103.     BL = object
  1104.         00h handle is DWORD on top of stack
  1105.         mailbox: wait for and get next message
  1106.         keyboard: wait for and get pointer to next input buffer
  1107.         pointer: wait for and get next message
  1108.         02h get next message from mailbox (task's handle on top of stack)
  1109.         03h get next message from current task's mailbox
  1110.         04h get the next input from keyboard (handle on top of stack)
  1111.         05h get the next input from task's default keyboard
  1112.         06h wait for input from any object in OBJECTQ (handle on stack)
  1113.         07h wait for input from any object in task's default OBJECTQ
  1114. Return: STACK: (if objectq) DWORD handle of object with input
  1115.            (otherwise)  DWORD number of bytes
  1116.                 DWORD address of pointer message (see #00437)
  1117. Notes:    for a keyboard in keystroke mode, the input buffer is a single byte
  1118.       containing the character code as returned by the BIOS; the BIOS scan
  1119.       code is available via the STATUS call if the character is zero
  1120.     for a keyboard in field mode, the input buffer format is determined
  1121.       by the field table header for the window the keyboard is attached to
  1122.     keyboard input buffers and mailbox message buffers may be invalidated
  1123.       by the next READ, ERASE, CLOSE, or FREE message to the same object
  1124. SeeAlso: AH=12h/BH=05h"OBJECT",AH=12h/BH=84h
  1125.  
  1126. Format of DESQview pointer message:
  1127. Offset    Size    Description    (Table 00437)
  1128.  00h    WORD    row
  1129.  02h    WORD    column
  1130.  04h    BYTE    status (see #00438)
  1131.  05h    BYTE    field number or zero (APILEVEL >= 2.00 only)
  1132.  
  1133. Bitfields for DESQview pointer status:
  1134. Bit(s)    Description    (Table 00438)
  1135.  7-2    number of clicks-1 if multiple-click mode active
  1136.  7    set when press/release mode active and button pressed
  1137.  6    set when press/release mode active and button released
  1138.  1-0    button pressed (00=none,01=button1,10=button2)
  1139. SeeAlso: #00437
  1140. --------Q-1512--BX0400-----------------------
  1141. INT 15 - TopView - SEND MESSAGE - "READ" - WAIT FOR TIMER TO EXPIRE
  1142.     AH = 12h
  1143.     BX = 0400h
  1144.     STACK: DWORD timer's handle
  1145. Return: after timer expires
  1146.     STACK: DWORD time in 1/100 sec after midnight when timer expired
  1147. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=84h
  1148. --------Q-1512--BX0400-----------------------
  1149. INT 15 - TopView - SEND MESSAGE - "APPLY" - WRITE PANEL TO WINDOW
  1150.     AH = 12h
  1151.     BX = 0400h
  1152.     STACK: DWORD handle of panel object
  1153.            DWORD window's handle (or 0 for current task's window)
  1154.            DWORD length of panel name
  1155.            DWORD pointer to panel name
  1156. Return: STACK: DWORD handle of window which was used
  1157.            DWORD handle of keyboard or 0
  1158. Notes:    status of APPLY may be checked with STATUS message
  1159.     panel MUST have the following format
  1160.       first byte must be 1Bh (i.e. must start with a stream)
  1161.       first opcode in stream must be E5h
  1162.         single byte arg of opcode is interpreted thus:
  1163.           bits 7,6    11 means create new window
  1164.             10 means create new field table for existing window
  1165.             01 means use existing window and field table
  1166.           bit 5 if set, panel contains a field table
  1167.             (creates a new keyboard and puts it in field mode)
  1168.           bit 4 if set, panel contains input fields
  1169.           bit 3 if set, panel contains select fields but no input fields
  1170.     if the panel contains input or select fields, a keyboard handle is
  1171.       returned; either the window's current open keyboard or a
  1172.       newly-created keyboard object.  The caller should read that keyboard
  1173.       to obtain input from the panel.
  1174. SeeAlso: AH=12h/BH=84h
  1175. --------Q-1512--BH05------------------------
  1176. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE TO OBJECT
  1177.     AH = 12h
  1178.     BH = 05h
  1179.     BL = object
  1180.         00h handle is DWORD on top of stack
  1181.         timer: start timer to end at a specified time
  1182.         keyboard: add input buffer to queue
  1183.         pointer: move pointer icon to specified position
  1184.         02h send message by value/status=0 to mbox (task's handle on stack)
  1185.         03h send message by value/status=0 to current task's mailbox
  1186.         04h add input buffer to KEYBOARD queue (handle on top of stack)
  1187.         05h add input buffer to task's default KEYBOARD queue
  1188.         06h add an object to OBJECTQ (handle on top of stack)
  1189.         07h add an object to task's default OBJECTQ
  1190.     STACK: (if mailbox)  DWORD length
  1191.                  DWORD address
  1192.            (if keyboard) DWORD status (scan code in keystroke mode)
  1193.                  DWORD length (should be 1 in keystroke mode)
  1194.                  DWORD address
  1195.            (if objectq)  DWORD handle of object to add
  1196.            (if timer)    DWORD 1/100ths seconds since midnight (actually
  1197.                    only accurate to 1/18 sec)
  1198.            (if pointer)  DWORD column relative to origin of window
  1199.                  DWORD row relative to origin of window
  1200. Return: STACK popped
  1201. Notes:    under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  1202.     the data and status written to a keyboard object must match the format
  1203.       returned by the keyboard object in the current mode
  1204.     the pointer position is scaled according to the current scaling factors
  1205. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1206. --------Q-1512--BH05-------------------------
  1207. INT 15 - TopView - SEND MESSAGE - "WRITE" - WRITE STRING TO WINDOW
  1208.     AH = 12h
  1209.     BH = 05h
  1210.     BL = window to write to
  1211.         00h DWORD on top of stack is window handle
  1212.         01h write string to task's default window
  1213.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1214.         0Dh (DV 2.26+) default window of parent of current task
  1215.     STACK: DWORD object handle if handle passed on stack
  1216.            DWORD total length of string (high word == 0)
  1217.            DWORD address of string to display (see #00439)
  1218. Return: indicated actions performed
  1219.     a. non-control characters are displayed (opcodes DEh and DFh control
  1220.        whether the attributes are left or changed to the current attrib)
  1221.     b. CR/LF/BS/Tab cause the usual cursor movement
  1222.     c. ESC starts a data structure with additional commands if following
  1223.        byte is less than 20h; otherwise, it is written to the window
  1224.     STACK:    DWORD handle of new window if window stream opcode E6h
  1225.         else nothing (arguments have been popped)
  1226. SeeAlso: AH=12h/BH=04h,AH=12h/BH=85h
  1227.  
  1228. Format of stream data structure:
  1229. Offset    Size    Description    (Table 00439)
  1230.  00h    BYTE    1Bh magic value identifying start of stream
  1231.  01h    BYTE    stream type (00h, 01h, 10h, 14h-1Fh legal)
  1232.         (see #00440,#00446,#00447,#00448)
  1233.  02h    WORD    length of remainder of stream in bytes
  1234.     var-length fields follow, each an OPCODE followed by
  1235.          zero or more args
  1236.  
  1237. (Table 00440)
  1238. Values for MODE 00h (set or display values) "WINDOW STREAM" opcodes:
  1239. Opcodes:args
  1240.  00h  display 20h blanks with the default attribute
  1241.  01h-1Fh display OPCODE blanks with the default attribute
  1242.  20h  display char with default attribute 20h times
  1243.     BYTE char to repeat
  1244.  21h-3Fh display char with default attribute OPCODE-20h times
  1245.     BYTE char to repeat
  1246.  40h  display 20h blanks with specified attribute
  1247.     BYTE attribute of blanks
  1248.  41h-5Fh display OPCODE-40h blanks with specified attribute
  1249.     BYTE attribute of blanks
  1250.  60h  display next 20h characters
  1251.     20h BYTEs characters to display
  1252.  61h-7Fh display next OPCODE-60h characters
  1253.     N BYTEs characters to display
  1254.  80h-87h display N blanks with default attribute
  1255.     BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1256.           [000h means 800h]
  1257.  88h-8Fh display N copies of the character
  1258.     BYTE low 8 bits of 11-bit count (high 3 in low 3 bits of OPCODE)
  1259.           [000h means 800h]
  1260.     BYTE character to repeat
  1261.  90h-97h display N blanks with specified attribute
  1262.     BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1263.           [000h means 800h]
  1264.     BYTE attribute
  1265.  98h-9Fh display string at logical cursor pos
  1266.     BYTE low 8 bits of 11-bit length (high 3 in low 3 bits of OPCODE)
  1267.           [000h means 800h]
  1268.     N BYTEs string to display
  1269.  A0h  set logical cursor row
  1270.     BYTE row number (0 is top)
  1271.  A1h  set logical cursor column
  1272.     BYTE column number (0 is leftmost)
  1273.  A2h  set top edge of scrolling region
  1274.     BYTE row
  1275.  A3h  set left edge of scrolling region
  1276.     BYTE column
  1277.  A4h  set row of physical window position
  1278.     BYTE line
  1279.  A5h  set column of physical window position
  1280.     BYTE column
  1281.  A6h  set height of physical window
  1282.     BYTE number of rows
  1283.  A7h  set width of physical window
  1284.     BYTE number of columns
  1285.  A8h  set viewport row
  1286.     BYTE row
  1287.  A9h  set viewport column
  1288.     BYTE column
  1289.  AAh  set virtual screen height [contents of window unpredictable after]
  1290.     BYTE rows
  1291.  ABh  set virtual screen width [contents of window unpredictable after]
  1292.     BYTE columns
  1293.  ACh-AEh unused
  1294.  AFh  set compatible/preferred video modes
  1295.     BYTE compatibility/preference mask
  1296.         bit 7    compatible with monochrome
  1297.         bit 6    compatible with color text, EGA/VGA graphics
  1298.         bit 5    compatible with medium-resolution CGA graphics
  1299.         bit 4    compatible with high-resolution CGA graphics
  1300.         bit 3    prefer monochrome
  1301.         bit 2    prefer color text, EGA/VGA graphics
  1302.         bit 1    prefer medium-resolution CGA graphics
  1303.         bit 0    prefer high-resolution CGA graphics
  1304.  B0h  move logical cursor down
  1305.     BYTE number of rows (signed, negative values move up)
  1306.         [if rows=0 and hardware cursor owner, update hardware cursor]
  1307.  B1h  move logical cursor right
  1308.     BYTE number of columns (signed, negative values move left)
  1309.         [if cols=0 and hardware cursor owner, update hardware cursor]
  1310.  B2h  shift top edge of scrolling region
  1311.     BYTE number of rows (signed)
  1312.  B3h  shift left edge of scrolling region
  1313.     BYTE number of columns (signed)
  1314.  B4h  shift physical window down
  1315.     BYTE number of lines (signed)
  1316.  B5h  shift physical window right
  1317.     BYTE number of columns (signed)
  1318.  B6h  expand physical window vertically
  1319.     BYTE number of lines (signed)
  1320.  B7h  expand physical window horizontally
  1321.     BYTE number of columns (signed)
  1322.  B8h  adjust viewport row
  1323.     BYTE number of rows (signed)
  1324.  B9h  adjust viewport column
  1325.     BYTE number of columns (signed)
  1326.  BAh  adjust virtual screen height [contents of window unpredict after]
  1327.     BYTE number of rows to increase (signed)
  1328.  BBh  adjust virtual screen width [contents of window unpredictbl after]
  1329.     BYTE number of columns to increase (signed)
  1330.  BCh-BFh reserved (currently unused)
  1331.  C0h  set logical cursor position
  1332.     BYTE row number (0 is top border)
  1333.     BYTE column number (0 is left border)
  1334.  C1h  set top left corner of scrolling region
  1335.     BYTE row
  1336.     BYTE column
  1337.  C2h  set physical window pos
  1338.     BYTE upper left row (no top border if 0)
  1339.     BYTE upper left column (no left border if 0)
  1340.  C3h  set current window size
  1341.     BYTE number of rows
  1342.     BYTE number of columns
  1343.  C4h  set upper left corner of viewport (portion of virtual screen displayed
  1344.       in window)
  1345.     BYTE row
  1346.     BYTE column
  1347.  C5h  set size of virtual screen [contents unpredictable afterwards]
  1348.     BYTE number of rows
  1349.     BYTE number of columns
  1350.  C6h  unused
  1351.  C7h  unused
  1352.  C8h  set logical cursor relative to current position
  1353.     BYTE number of rows to move down (signed)
  1354.     BYTE number of columns to move right (signed)
  1355.         [if rows=cols=0 and hardware cursor owner, update hardw cursor]
  1356.  C9h  shift top left corner of scrolling region
  1357.     BYTE number of rows (signed)
  1358.     BYTE number of columns (signed)
  1359.  CAh  set window pos relative to current position
  1360.     BYTE number of rows to shift down (signed)
  1361.     BYTE number of columns to shift right (signed)
  1362.  CBh  set window size relative to current size
  1363.     BYTE number of rows to expand (signed)
  1364.     BYTE number of cols to expand (signed)
  1365.  CCh  shift viewport relative to current position
  1366.     BYTE rows to shift (signed)
  1367.     BYTE cols to shift (signed)
  1368.  CDh  resize virtual screen
  1369.     BYTE number of rows to expand (signed)
  1370.     BYTE number of columns to expand (signed)
  1371.  CEh  scroll text when using E8h-EBh/F8h-FBh opcodes (default)
  1372.  CFh  scroll attributes when using  E8h-EBh/F8h-FBh opcodes
  1373.  D0h  allow window frame to extend beyond screen
  1374.  D1h  always display a complete frame, even if window extends beyond edge of
  1375.       screen
  1376.  D2h  allow DV to change logical colors on video mode switch (default)
  1377.  D3h  application changes logical attributes
  1378.  D4h  window is visible [must redraw to actually make visible]
  1379.  D5h  window is hidden [must redraw to actually remove]
  1380.  D6h  window has frame (default)
  1381.  D7h  window unframed [must redraw to actually remove frame]
  1382.  D8h  READ/READN will read characters from window (default)
  1383.  D9h  READ/READN will read attributes from window
  1384.  DAh  use logical attributes, which may be remapped (see #00441)
  1385.  DBh  use physical attributes for characters
  1386.  DCh  enable special actions for control characters (default)
  1387.  DDh  disable special control char handling, all chars displayable by BIOS TTY
  1388.       call
  1389.  DEh  write both character and attribute (default)
  1390.  DFh  write character only, leave attribute untouched
  1391.  E0h  repeat following commands through E1h opcode
  1392.     BYTE number of times to repeat (00h means 256 times)
  1393.  E1h  end of commands to repeat, start repeating them
  1394.  E2h  set current output color
  1395.     BYTE color
  1396.  E3h  clear virtual screen from scroll origin to end using current color
  1397.  E4h  redraw window
  1398.  E5h  select menu style
  1399.     BYTE style (normally 18h)
  1400.         bits 5,4 = 01 use two-letter menu entries for remainder of
  1401.           this stream
  1402.  E5h  (panel file only)
  1403.     BYTE modifier
  1404.         bits 7,6 = 11 panel stream creates new window
  1405.              = 10 panel defines new field table for existing window
  1406.              = 01 panel stream uses existing window & field table
  1407.         bit 5 = 1 stream contains a field table (create kyboard object)
  1408.         bit 4 = 1 stream defines input fields (create keyboard object)
  1409.         bit 3 = 1 stream defines select fields but not input fields
  1410.         bit 2 = 1 stream defines exclusive input window (DV 2.2)
  1411.         bit 1 reserved
  1412.         bit 0 reserved
  1413.  E6h  create new window and perform rest of manipulations in new window
  1414.     BYTE number of rows
  1415.     BYTE number of columns
  1416.     Return: DWORD object handle of new window returned on stack at end
  1417.     Note:    the window is created with a physical size of 0x0 at the
  1418.           same position as the window to which this stream was sent
  1419.  E7h  no operation
  1420.  E8h  scroll area up (top left corner defined by opcode C1h)
  1421.     BYTE height
  1422.     BYTE width
  1423.  E9h  scroll area down (top left corner defined by opcode C1h)
  1424.     BYTE height
  1425.     BYTE width
  1426.  EAh  scroll area left (top left corner defined by opcode C1h)
  1427.     BYTE height
  1428.     BYTE width
  1429.  EBh  scroll area right (top left corner defined by opcode C1h)
  1430.     BYTE height
  1431.     BYTE width
  1432.  ECh  set logical attributes for window contents
  1433.     BYTE video modes command applies to
  1434.         bit 7    monochrome
  1435.         bit 6    color text, EGA/VGA graphics
  1436.         bit 5    medium-resolution CGA graphics
  1437.         bit 4    high-resolution CGA graphics
  1438.     BYTE which attributes to set
  1439.         bit 7    if set, copy single following byte to indicated attribs
  1440.         bits 4-6  number of first attribute to change - 1
  1441.         bits 0-3  number of consecutive attributes to change
  1442.     N BYTEs new attributes
  1443.  EDh  set logical attributes for window frame
  1444.     BYTE video modes command applies to (also see opcode ECh)
  1445.     BYTE which attributes to set
  1446.         bit 7    if set, copy single following byte to indicated attrs
  1447.         bits 4-6  number of first attribute to change - 1
  1448.         bits 0-3  number of consecutive attributes to change
  1449.     N BYTEs new attributes
  1450.           attributes
  1451.                1 = top left corner
  1452.                2 = top right corner
  1453.                3 = bottom left corner
  1454.                4 = bottom right corner
  1455.                5 = top edge
  1456.                6 = bottom edge
  1457.                7 = left edge
  1458.                8 = right edge
  1459.  EEh  set characters for window frame
  1460.     BYTE video modes command applies to (also see opcode ECh)
  1461.     BYTE which characters to set
  1462.         bit 7    if set, copy single following byte to indicated chars
  1463.         bits 4-6  number of first character to change - 1
  1464.         bits 0-3  number of consecutive characters to change
  1465.     N BYTEs new chars (same relative position as attributes above)
  1466.  EFh  set window name
  1467.     BYTE length of name (should be in range 0 to logical screen width)
  1468.     N BYTEs name
  1469.  F0h  clear input field to blanks
  1470.     BYTE field number
  1471.  F1h  fill input field with character
  1472.     BYTE field number
  1473.     BYTE char
  1474.  F2h  set color of input field
  1475.     BYTE field number (1-N)
  1476.     BYTE attribute
  1477.  F3h  set initial contents of input field
  1478.     BYTE field number (1-N)
  1479.     N BYTEs enough chars to exactly fill field as defined by op FFh
  1480.  F4h  position cursor to start of specific input field
  1481.     BYTE field number (1-N)
  1482.  F5h  change field table entry
  1483.     BYTE field number
  1484.     7-8 BYTEs field table entry (also see opcode FFh below)
  1485.  F6h  set field type
  1486.     BYTE field number
  1487.     BYTE type
  1488.         00h inactive
  1489.         40h output field
  1490.         80h input field
  1491.         C0h deselected field
  1492.         C2h selected field
  1493.  F7h  "broadcast write"    write data to fields with program output bit set in
  1494.       the field table entry, in field number order
  1495.     N BYTEs (total length of all program output fields)
  1496.  F8h  scroll field up a line
  1497.     BYTE field number
  1498.  F9h  scroll field down a line
  1499.     BYTE field number
  1500.  FAh  scroll field left
  1501.     BYTE field number
  1502.  FBh  scroll field right
  1503.     BYTE field number
  1504.  FCh  set field table header
  1505.     6 BYTEs    field table header (see #00442)
  1506.  FDh  reset modified bit for all fields
  1507.  FEh  reset selected and modified bits for all fields
  1508.  FFh  set up input fields
  1509.     6 BYTEs    table header (see #00442)
  1510.     7/8N BYTEs the field table entries, one for each field (see #00444)
  1511.     Note:    DESQview uses and updates the actual copy of the information
  1512.           which is contained in the stream.  Thus this info must remain
  1513.           intact until after the data entry is complete.
  1514. SeeAlso: #00439,#00446
  1515.  
  1516. (Table 00441)
  1517. Values for TopView logical attributes:
  1518.  01h    normal text
  1519.  02h    highlighted normal text
  1520.  03h    help text
  1521.  04h    highlighted help text
  1522.  05h    error message
  1523.  06h    highlighted error message
  1524.  07h    emphasized text
  1525.  08h    marked text
  1526.  9-16    reverse video versions of 1-8
  1527. SeeAlso: #00440
  1528.  
  1529. Format of TopView field table header:
  1530. Offset    Size    Description    (Table 00442)
  1531.  00h    BYTE    number of fields (must be <= existing number of fields)
  1532.  01h    BYTE    screen behavior bits (see #00443)
  1533.  02h    BYTE    current input field (updated by DESQview)
  1534.  03h    BYTE    current select field (updated by DESQview)
  1535.  04h    BYTE    attribute for select fields when they are pointed at
  1536.  05h    BYTE    attribute for select fields which have been selected
  1537. SeeAlso: #00440,#00444
  1538.  
  1539. Bitfields for TopView screen behavior bits:
  1540. Bit(s)    Description    (Table 00443)
  1541.  7    reserved
  1542.  6    menu items may be selected via keyboard
  1543.  5    left mouse button in "status" mode (press anywhere in window
  1544.       immediately returns control to application)
  1545.  4    right mouse button in "status" mode
  1546.  3    select fields return contents or blanks rather than 'Y' or 'N'
  1547.  2    modified bits reset on return to application
  1548.  1-0    type of data returned
  1549.     00 no data returned on read of keyboard
  1550.     01 data returned as array of characters containing all fields packed
  1551.           together, with no field numbers
  1552.     10 data returned as numbered variable-length records for all fields
  1553.     11 data returned as numbered variable-length records for the fields
  1554.           which were modified
  1555. SeeAlso: #00440
  1556.  
  1557. Format of TopView field table entry:
  1558. Offset    Size    Description    (Table 00444)
  1559.  00h    BYTE    start row    \
  1560.  01h    BYTE    start column  \ if menu selection and start is to
  1561.  02h    BYTE    end row          / right or below end, select from kbd only
  1562.  03h    BYTE    end column   /
  1563.  04h    BYTE    field type (see #00445)
  1564.  05h    BYTE    modifier
  1565.         if type is fill-in, then bit flags to determine behavior
  1566.           bit 7     automatically enter CR when field full
  1567.           bit 6     move to next field when current field is full
  1568.           bit 5     enter text from right end (for numbers)
  1569.           bit 4     force input to uppercase
  1570.           bit 3     clear old contents on first keystroke
  1571.           bit 2     input returned when cursor moves out of
  1572.               modified field ("validate", API level 2.02+)
  1573.           bit 1     reserved
  1574.           bit 0     reserved
  1575.         if select field, first key to press to activate
  1576.           00h if have to point-&-click or is an extended-ASCII
  1577.               keystroke (only if two-key menus enabled)
  1578.  06h    BYTE    (select field only) normal color of field
  1579.  07h    BYTE    second key for select field.  This byte is present iff
  1580.           two-letter menu entries selected with opcode E5h, and in that
  1581.           case is present regardless of field type
  1582. SeeAlso: #00442
  1583.  
  1584. Bitfields for TopView field type:
  1585. Bit(s)    Description    (Table 00445)
  1586.  7,6    field class
  1587.     00 inactive (non-entry) field
  1588.     01 echos keystrokes input to make menu selection
  1589.     10 fill-in field
  1590.     11 select field
  1591.  5    field can be filled by broadcast write (F7h opcode)
  1592.  4    reserved
  1593.  3    reserved
  1594.  2    reserved
  1595.  1    set if field selected
  1596.  0    set if field modified
  1597. SeeAlso: #00444
  1598.  
  1599. (Table 00446)
  1600. Values for MODE 01h "QUERY STREAM" opcodes:
  1601. (valid only for those opcodes listed here)
  1602.  A0h return logical cursor row in next byte
  1603.  A1h return logical cursor column in next byte
  1604.  A2h return top row of scrolling region in next byte
  1605.  A3h return left column of scrolling region in next byte
  1606.  A4h return row of physical window origin in next byte
  1607.  A5h return column of physical window origin in next byte
  1608.  A6h return height of physcial window in next byte
  1609.  A7h return width of physical window in next byte
  1610.  A8h return row of viewport origin in next byte
  1611.  A9h return column of viewport origin in next byte
  1612.  AAh return height of virtual screen in next byte
  1613.  ABh return width of virtual screen in next byte
  1614.  AFh return current video mode in next byte
  1615.  C0h return current logical cursor position in next two bytes
  1616.  C1h return top left corner of scrolling region in next two bytes
  1617.  C2h return current window position in next two bytes
  1618.  C3h return current window size in next two bytes
  1619.  C4h return current viewport origin in next two bytes
  1620.  C5h return current virtual screen size in next two bytes
  1621.  D0h \ overwritten with D0h if frames may fall off screen edge
  1622.  D1h /               D1h if frames always displayed entirely
  1623.  D2h \ overwritten with D2h if DESQview controls color palette
  1624.  D3h /               D3h if application changes color palette
  1625.  D4h \ overwritten with D4h if window visible
  1626.  D5h /               D5h if window hidden
  1627.  D6h \ overwritten with D6h if window has frame
  1628.  D7h /               D7h if window unframed
  1629.  D8h \ overwritten with D8h if reading characters from window
  1630.  D9h /               D9h if reading attributes from window
  1631.  DAh \ overwritten with DAh if using logical attributes
  1632.  DBh /               DBh if using physical attributes
  1633.  DCh \ overwritten with DCh if TTY control char interpretation on
  1634.  DDh /               DDh if TTY control char interpretation off
  1635.  DEh \ overwritten with DEh if writing both characters and attributes
  1636.  DFh /               DFh if leaving attributes untouched
  1637.  E2h return current color in next byte
  1638.  ECh get logical attributes for window contents
  1639.     BYTE execute call if currently in specified video mode
  1640.         bit 7    monochrome
  1641.         bit 6    color text, EGA/VGA graphics
  1642.         bit 5    medium-resolution CGA graphics
  1643.         bit 4    high-resolution CGA graphics
  1644.     BYTE which attributes to get
  1645.         bit 7    unused???
  1646.         bits 4-6 first attribute to get - 1
  1647.         bits 0-3 number of consecutive attributes
  1648.     N BYTEs buffer to hold attributes
  1649.  EDh get logical attributes for window frame
  1650.     BYTE execute call if currently in video mode (also see opcode ECh)
  1651.     BYTE which attributes to get
  1652.         bit 7    unused???
  1653.         bits 4-6 first attribute to get - 1
  1654.         bits 0-3 number of consecutive attributes
  1655.     N BYTEs buffer to hold attributes
  1656.  EEh get characters for window frame
  1657.     BYTE execute call if currently in video mode (also see opcode ECh)
  1658.     BYTE which attributes to get
  1659.         bit 7    unused???
  1660.         bits 4-6 first char to get - 1
  1661.         bits 0-3 number of consecutive chars
  1662.     N BYTEs buffer to hold chars
  1663.  EFh return first N characters of current window name
  1664.     BYTE    max length of returned name
  1665.     N BYTEs buffer to hold window name
  1666.  F3h return contents of specified field
  1667.     BYTE field number
  1668.     N BYTEs buffer to hold field contents (size equal to field size)
  1669.  F5h get field table entry
  1670.     BYTE field number
  1671.     7-8 BYTEs buffer to hold field table entry (see #00444)
  1672.     Notes:    DV < 2.26 always returns 7 bytes
  1673.         DV 2.26+ w/ APILEVEL < 2.26 returns 8 bytes iff field table
  1674.           is using 8-byte entries and eighth byte after    F5h is E7h
  1675.           (NOP); otherwise, 7 bytes are returned
  1676.         DV 2.26+ w/ APILEVEL > 2.26 returns 7 or 8 bytes depending
  1677.           on the field table entry size
  1678.  F6h get type of a field
  1679.     BYTE field number
  1680.     BYTE type
  1681.  FCh get field table header
  1682.     6 BYTEs buffer to store field table header (see #00442)
  1683. SeeAlso: #00439,#00447
  1684.  
  1685. (Table 00447)
  1686. Values for MODE 10h "MANAGER STREAM" opcodes (valid only for those listed):
  1687.  00h allow window to be moved horizontally
  1688.  01h allow window to be moved vertically
  1689.  02h allow window to change width
  1690.  03h allow window to change height
  1691.  04h allow window to be scrolled horizontally
  1692.  05h allow window to be scrolled vertically
  1693.  06h allow "Close Window" menu selection for application
  1694.  07h allow "Hide Window" menu selection for application
  1695.  08h allow application to be suspended ("Rearrange/Freeze")
  1696.  0Eh allow "Scissors" menu
  1697.  10h allow DESQview main menu to be popped up
  1698.  11h allow "Switch Windows" menu
  1699.  12h allow "Open Window" menu
  1700.  13h allow "Quit" menu selection
  1701.  20h-33h opposite of 00h-13h, disallow specified action
  1702.  40h notify if horizontal position of window changes
  1703.  41h notify if vertical position of window changes
  1704.  42h notify if width of window changes
  1705.  43h notify if height of window changes
  1706.  44h notify if window scrolled horizontally
  1707.  45h notify if window scrolled vertically
  1708.  46h notify if window is closed--program has to clean up and exit itself
  1709.  47h notify if window is hidden
  1710.  48h notify if "?" on main menu selected
  1711.  49h notify if pointer message sent to window
  1712.  4Ah notify if window is placed in foreground
  1713.  4Bh notify if window is placed in background
  1714.  4Ch notify if video mode changes
  1715.  4Dh notify if "Scissors" menu "Cut" option selected
  1716.  4Eh notify if "Scissors" menu "Copy" option selected
  1717.  4Fh notify if "Scissors" menu "Paste" option selected
  1718.  50h notify if DESQview main menu about to pop up
  1719.  51h notify if DESQview main menu popped down
  1720.  60h-71h     opposite of 40h-51h: don't notify on specified event
  1721.  84h attach window to parent task's window (both move together)
  1722.  85h detach window from parent task's window (may move independently)
  1723.  86h disable background operation for application
  1724.  87h enable running in background
  1725.  88h set minimum size of physical window
  1726.     BYTE rows
  1727.     BYTE columns
  1728.  89h set maximum size of physical window
  1729.     BYTE rows
  1730.     BYTE cols
  1731.  8Ah set primary asynchronous notification routine (see #00449)
  1732.     DWORD address of routine, 0000h:0000h means none (see also below)
  1733.  8Bh set async notification parameter
  1734.     DWORD 32-bit value passed to 8Ah async routine in DS:SI
  1735.  ACh (DV2.2+) perform regular select field attribute processing
  1736.  ADh (DV2.2+) protect attributes in selected field from being lost
  1737.  AEh make window default notify window for owning app (API level 2.00+)
  1738.  AFh set selected field marker character
  1739.     BYTE character to display at left edge of selected fields
  1740.  BCh set standard field processing mode
  1741.  BDh set alternate field processing mode (enables cursor pad for menus)
  1742.  BEh disables changing reverse logical attributes with ECh opcode
  1743.  BFh enables changing reverse logical attributes with ECh opcode
  1744.  C0h make current window topmost in system
  1745.  C1h force current process into foreground
  1746.  C2h make current window topmost in process
  1747.  C3h position mouse pointer relative to origin of current field
  1748.     BYTE rows below upper left corner of field
  1749.     BYTE columns to right of upper left corner of field
  1750.  C4h position mouse pointer relative to origin of given field
  1751.     BYTE field number
  1752.     BYTE rows below upper left corner of field
  1753.     BYTE columns to right of upper left corner of field
  1754.  C5h orphan current window (also hides it)
  1755.     Note: must be last in stream; all subsequent commands ignored
  1756.  C6h show all windows for this process
  1757.  C7h hide all windows for this process
  1758.  C8h suspend process and hide all its windows
  1759.  C9h force current process into background
  1760.  CAh make current window bottom-most in process
  1761.  CBh cancel current window manager operation, remove DV menu, give control
  1762.       to topmost application
  1763.  CCh orphan window and give it to the system for use as paste data
  1764.  CEh reorder windows
  1765.     DWORD pointer to null-terminated list of words; each word is segment
  1766.           of object handle for a window
  1767.  FFh no operation
  1768. SeeAlso: #00439,#00446,#00448
  1769.  
  1770. (Table 00448)
  1771. Values for MODES 14h to 1Fh "USER STREAMS":
  1772.     normally NOPs, but may be defined by SETESC message to invoke FAR
  1773.     routines, one for each mode number
  1774.       on entry to handler,
  1775.         DS:SI -> first byte of actual stream (not header)
  1776.         CX = number of bytes in stream
  1777.         ES:DI = window's handle
  1778. SeeAlso: #00446,#00447
  1779.  
  1780. (Table 00449)
  1781. Values asynchronous notification routine defined by man.stream 8Ah called with:
  1782.     ES:DI = handle of window
  1783.     DS:SI is 32-bit value set by 8Bh manager stream opcode
  1784.        mailbox contains message indicating event
  1785.           Opcode
  1786.            40h  horizontal movement
  1787.            DWORD object handle of window
  1788.            BYTE     new row
  1789.            BYTE     new col
  1790.            41h  vertical movement
  1791.            DWORD object handle of window
  1792.            BYTE     new row
  1793.            BYTE     new col
  1794.            42h  horizontal size change
  1795.            DWORD object handle of window
  1796.            BYTE     new rows
  1797.            BYTE     new cols
  1798.            43h  vertical size change
  1799.            DWORD object handle of window
  1800.            BYTE     new rows
  1801.            BYTE     new cols
  1802.            44h  scrolled horizontally
  1803.            DWORD object handle of window
  1804.            BYTE     mouse row within window
  1805.            BYTE     mouse column within window
  1806.            BYTE     field mouse is on, 0 if none
  1807.            BYTE     amount moved: >0 right, <0 left, 0 done
  1808.            45h  scrolled vertically
  1809.            DWORD object hande of window
  1810.            BYTE     mouse row within window
  1811.            BYTE     mouse column within window
  1812.            BYTE     field mouse is on, 0 if none
  1813.            BYTE     amount moved: >0 down, <0 up, 0 done
  1814.            46h  window close request
  1815.            DWORD object handle of window
  1816.            BYTE     mouse pointer row
  1817.            BYTE     mouse pointer column
  1818.            BYTE     field mouse is on, 0 if none
  1819.            47h  application's windows hidden
  1820.            48h  Help for Program selected
  1821.            DWORD object handle of window
  1822.            BYTE     mouse pointer row
  1823.            BYTE     mouse pointer column
  1824.            BYTE     field mouse is on, 0 if none
  1825.            49h  pointer message sent to window
  1826.            DWORD pointer handle which received message
  1827.            4Ah  switched to window from another ("raise")
  1828.            4Bh  switched away from the window ("lower")
  1829.            4Ch  video mode changed
  1830.            BYTE new BIOS video mode
  1831.            4Dh  Scissors/cUt selected
  1832.            DWORD object handle of window
  1833.            BYTE     row of upper left corner
  1834.            BYTE     column of upper left corner
  1835.            BYTE     field number ul corner is in, 0=none
  1836.            DWORD handle of orphaned window created with
  1837.              copy of data from specified region
  1838.            BYTE     height of region
  1839.            BYTE     width of region
  1840.            4Eh  Scissors/Copy selected
  1841.            DWORD object handle of window
  1842.            BYTE     row of upper left corner
  1843.            BYTE     column of upper left corner
  1844.            BYTE     field number ul corner is in, 0=none
  1845.            DWORD handle of orphaned window created with
  1846.              copy of data from specified region
  1847.            BYTE     height of region
  1848.            BYTE     width of region
  1849.            4Fh  Scissors/Paste selected
  1850.            DWORD object handle of window
  1851.            BYTE     row of upper left corner
  1852.            BYTE     column of upper left corner
  1853.            BYTE     field number ul corner is in, 0=none
  1854.            DWORD handle of orphaned window with data
  1855.            BYTE     height of region
  1856.            BYTE     width of region
  1857.             Note: orphaned data window should be adopted or freed
  1858.                 when done
  1859.            50h  main menu about to pop up
  1860.            51h  main menu popped down
  1861. Return: all registers unchanged
  1862. --------Q-1512--BH06-------------------------
  1863. INT 15 - DESQview 2.20+ - SEND MESSAGE - "SETPRI" - SET PRIORITY WITHIN OBJECTQ
  1864.     AH = 12h
  1865.     BH = 06h
  1866.     BL = object
  1867.         00h object handle in DWORD on top of stack
  1868.         mailbox, keyboard, pointer, or timer
  1869.         (DV 2.50+) window
  1870.         01h (DV 2.50+) current task's window
  1871.         04h given task's keyboard (task's handle on top of stack)
  1872.         05h current task's default keyboard
  1873.     STACK: DWORD new priority of object in task's OBJECTQ
  1874.             (new priority of task if window handle)
  1875. Return: STACK popped
  1876. Notes:    initially all objects have the same default value.  Should only make
  1877.       relative adjustments to this default value.
  1878.     when changing priorities, all objects already on the objectq are
  1879.       reordered
  1880.     for window handles, only the non-blocked task(s) with the highest
  1881.       priority receive CPU time under DESQview 2.50-2.52; the default
  1882.       priority is 0Ah
  1883. SeeAlso: AH=12h/BH=07h,AH=12h/BH=87h
  1884. --------Q-1512--BH07-------------------------
  1885. INT 15 - DESQview 2.20+ - SEND MESSAGE - "GETPRI" - GET PRIORITY WITHIN OBJECTQ
  1886.     AH = 12h
  1887.     BH = 07h
  1888.     BL = object
  1889.         00h object handle in DWORD on top of stack
  1890.         mailbox, keyboard, pointer, or timer
  1891.         (DV 2.50+) window
  1892.         01h (DV 2.50+) current task's window
  1893.         04h given task's keyboard (task's handle on top of stack)
  1894.         05h current task's default keyboard
  1895. Return: STACK: DWORD object priority
  1896. Note:    initially all objects have the same default value.  Should only make
  1897.       relative adjustments to this default value.
  1898. SeeAlso: AH=12h/BH=06h
  1899. --------Q-1512--BH08-------------------------
  1900. INT 15 - TopView - SEND MESSAGE - "SIZEOF" - GET OBJECT SIZE
  1901.     AH = 12h
  1902.     BH = 08h
  1903.     BL = object
  1904.         00h handle in DWORD on top of stack
  1905.         window: total character positions in window
  1906.         timer: elapsed time since timer started
  1907.         pointer: number of messages queued to pointer object
  1908.         panel: number of panels in panel file
  1909.         keyboard: number of input buffers queued
  1910.         01h total chars in current task's default window
  1911.         02h number of messages in task's mailbox (task's handle on stack)
  1912.         03h number of messages in current task's mailbox
  1913.         04h number of input buffers queued in task's kbd (handle on stack)
  1914.         05h number of input buffers queued for current task's default kbd
  1915.         06h number of objects queued in OBJECTQ (task's handle on stack)
  1916.         07h number of objects queued in current task's OBJECTQ
  1917.         0Ch (DV 2.26+) total chars in window owning handle on top of stack
  1918.         0Dh (DV 2.26+) total chars in parent task's window
  1919. Return: DWORD on top of stack is result (any handle on stack has been popped)
  1920. Note:    for panel objects, a count of zero is returned if no panel file is open
  1921.       for the object
  1922. SeeAlso: AH=12h/BH=04h,AH=12h/BH=09h
  1923. --------Q-1512--BH09-------------------------
  1924. INT 15 - TopView - SEND MESSAGE - "LEN" - GET OBJECT LENGTH
  1925.     AH = 12h
  1926.     BH = 09h
  1927.     BL = object
  1928.         00h handle in DWORD on top of stack
  1929.         window: get chars/line
  1930.         timer: get 1/100 seconds remaining before timer expires
  1931.         mailbox: (DV/X) get number of bytes queued to mailbox
  1932.         01h get number of chars/line in current task's default window
  1933.         0Ch (DV 2.26+) get chars/line in window owning handle on top of stk
  1934.         0Dh (DV 2.26+) get chars/line in parent task's window
  1935. Return: DWORD on top of stack is length (any handle on stack has been popped)
  1936. SeeAlso: AH=12h/BH=08h
  1937. --------Q-1512--BH0A-------------------------
  1938. INT 15 - TopView - SEND MESSAGE - "ADDTO" - WRITE CHARS AND ATTRIBS TO WINDOW
  1939.     AH = 12h
  1940.     BH = 0Ah
  1941.     BL = window to write to
  1942.         00h window handle is DWORD on top of stack
  1943.         01h current task's default window
  1944.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  1945.         0Dh (DV 2.26+) default window of parent of current task
  1946.     STACK:    DWORD count of attributes
  1947.         DWORD address of attribute string
  1948.         DWORD count of characters
  1949.         DWORD address of character string
  1950. Return: STACK popped
  1951. Notes:    if one string is longer than the other, the shorter one will be reused
  1952.       until the longer one is exhausted
  1953.     the cursor is left just after the last character written
  1954. SeeAlso: AH=12h/BH=0Bh"WINDOW"
  1955. --------Q-1512--BH0A-------------------------
  1956. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SEND MAILBOX MESSAGE/STAT BY VALUE
  1957.     AH = 12h
  1958.     BH = 0Ah
  1959.     BL = mailbox to write to
  1960.         00h handle is DWORD on top of stack
  1961.         02h default mailbox of task whose handle is on top of stack
  1962.         03h current task's default mailbox
  1963.     STACK:    DWORD    status (low byte)
  1964.         DWORD    length of message
  1965.         DWORD    address of message
  1966. Return: STACK popped
  1967. Notes:    the message is copied into either system or common memory
  1968.     insufficient memory normally causes the process to be aborted; under
  1969.       DESQview 2.2+, failed writes may return CF set instead (see AX=DE15h)
  1970. SeeAlso: AH=12h/BH=0Bh"MAILBOX"
  1971. --------Q-1512--BH0A-------------------------
  1972. INT 15 - TopView - SEND MESSAGE - "ADDTO" - SET OBJECT BITS
  1973.     AH = 12h
  1974.     BH = 0Ah
  1975.     BL = object
  1976.         00h handle is DWORD on top of stack
  1977.         timer: start timer for specified interval
  1978.         pointer: set control flags (see #00451)
  1979.         keyboard: set control flags (see #00450)
  1980.         04h set control flags on KEYBOARD object (handle on top of stack)
  1981.         05h set control flags on task's default KEYBOARD object
  1982.     STACK: (if timer)   DWORD duration in 1/100 seconds
  1983.            (otherwise)  DWORD bits to set
  1984. Return: STACK popped
  1985. SeeAlso: AH=12h/BH=0Bh"OBJECT"
  1986.  
  1987. Bitfields for DESQview keyboard object bits:
  1988. Bit(s)    Description    (Table 00450)
  1989.  15    reserved, can't be set
  1990.  14    unused
  1991.  13    reserved, can't be set
  1992.  12-6    unused
  1993.  5    (DV 2.2+) exclusive input
  1994.  4    filter all keys (used with handler established by SETESC)
  1995.     if 0, only keys that would normally be displayed are filtered
  1996.  3    program continues executing while input in progress
  1997.  2    insert mode active for field mode
  1998.  1    hardware cursor displayed when task is hardware cursor owner
  1999.     must be set if keyboard in field mode and field table includes input
  2000.       fields
  2001.  0    keyboard is in field mode rather than keystroke mode
  2002.  
  2003. Bitfields for DESQview pointer object bits:
  2004. Bit(s)    Description    (Table 00451)
  2005.  15    reserved, can't be set
  2006.  14-8    unused
  2007.  7    mouse pointer is hidden while in window
  2008.  6    get messages even if window not topmost
  2009.  5    get messages even if window not foreground
  2010.  4    multiple clicks separated by less than 1/3 second are counted and
  2011.       returned in a single message
  2012.  3    pointer position is relative to screen origin, not window origin
  2013.  2    send message on button release as well as button press
  2014.  1    (DV 2.23+) send message with row=FFFFh and col=FFFFh whenever the
  2015.       pointer leaves the window
  2016.  0    send message only on button activity, not movement
  2017.     DV-specific, and INT 15/AX=DE0Fh must have been called first
  2018. --------Q-1512--BH0B-------------------------
  2019. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - WRITE ATTRIBUTES TO WINDOW
  2020.     AH = 12h
  2021.     BH = 0Bh
  2022.     BL = window to write attributes to
  2023.         00h handle is DWORD on top of stack
  2024.         01h current task's default window
  2025.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2026.         0Dh (DV 2.26+) default window of parent of current task
  2027.     STACK:    DWORD number of attributes to write
  2028.         DWORD address of attributes
  2029. Return: STACK popped
  2030. Note:    the attributes are written starting at the current cursor position; the
  2031.       cursor is left just after the last position written
  2032. SeeAlso: AH=12h/BH=0Ah"WINDOW"
  2033. --------Q-1512--BH0B-------------------------
  2034. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - SEND MAILBOX MESSAGE/STAT BY REF
  2035.     AH = 12h
  2036.     BH = 0Bh
  2037.     BL = mailbox to write to
  2038.         00h handle is DWORD on top of stack
  2039.         02h default mailbox of task whose handle is on top of stack
  2040.         03h current task's default mailbox
  2041.     STACK:    DWORD    status (low byte)
  2042.         DWORD    length of message
  2043.         DWORD    address of message
  2044. Return: STACK popped
  2045. Notes:    only a pointer to the message is stored, but the write may still fail
  2046.       due to insufficient memory
  2047.     under DV 2.2+, failed mailbox writes may return CF set (see AX=DE15h)
  2048. SeeAlso: AH=12h/BH=0Ah"MAILBOX"
  2049. --------Q-1512--BH0B-------------------------
  2050. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - REMOVE OBJECT FROM OBJECTQ
  2051.     AH = 12h
  2052.     BH = 0Bh
  2053.     BL = OBJECTQ from which to remove all copies of a particular object
  2054.         06h OBJECTQ of task whose handle is on top of stack
  2055.         07h task's default OBJECTQ
  2056.     STACK:    DWORD    handle of object to remove
  2057. Return: STACK popped
  2058. Note:    should be sent whenever an object is erased or closed
  2059. --------Q-1512--BH0B-------------------------
  2060. INT 15 - TopView - SEND MESSAGE - "SUBFROM" - RESET OBJECT BITS
  2061.     AH = 12h
  2062.     BH = 0Bh
  2063.     BL = object
  2064.         00h handle is DWORD on top of stack
  2065.         pointer: reset control flags
  2066.         keyboard: reset control flags
  2067.         04h clear control flags on KEYBOARD object (handle on top of stack)
  2068.         05h clear control flags on task's default KEYBOARD object
  2069.     STACK:    DWORD    which bits to clear (see #00450,#00451)
  2070. Return: STACK popped
  2071. SeeAlso: AH=12h/BH=0Ah"OBJECT"
  2072. --------Q-1512--BH0C-------------------------
  2073. INT 15 - TopView - SEND MESSAGE - "OPEN" - OPEN OBJECT
  2074.     AH = 12h
  2075.     BH = 0Ch
  2076.     BL = object
  2077.         00h handle is DWORD on top of stack
  2078.         window:      fill with given character from scroll origin to end
  2079.         keyboard: attach to a window
  2080.         timer:      open
  2081.         pointer:  start taking input for window
  2082.         panel:      associate with a panel file
  2083.         01h fill task's default window with given char from scrl org to end
  2084.         02h open given task's mailbox for input (task's handle on stack)
  2085.         03h open current task's mailbox
  2086.         04h attach a KEYBOARD to a window (handle on top of stack)
  2087.         05h attach task's default KEYBOARD to a window
  2088.         06h open a task's OBJECTQ (task's handle on top of stack)
  2089.         07h open current task's OBJECTQ
  2090.         0Ch (DV 2.26+) fill def window of task owning handle on top of stck
  2091.         0Dh (DV 2.26+) fill default window of parent of current task
  2092.      STACK: (if window)   DWORD character to fill with
  2093.         (if keyboard) DWORD handle of window to attach to
  2094.         (if pointer)  DWORD handle of window to attach to
  2095.         (if panel)    DWORD length of filename or resident panel
  2096.                   DWORD address of filename or resident panel
  2097.         (otherwise)   nothing
  2098. Return: STACK popped
  2099. Notes:    if first byte of panel file name is 1Bh, then the "name" IS a panel
  2100.     if first two bytes of panel file "name" are C0hC3h, then the "name" IS
  2101.       the panel file
  2102.     result code of open may be retrieved with STATUS message
  2103.     logical cursor is left at scroll origin after filling window
  2104.     the task opening a mailbox becomes its owner, and the only task allowed
  2105.       to read the mailbox
  2106.     messages are only sent to a pointer object when the mouse is positioned
  2107.       in the window to which the pointer has been attached
  2108.     there is no need to explicitly open a timer object, as ADDTO and WRITE
  2109.       messages automatically open the timer
  2110. SeeAlso: AH=12h/BH=0Dh,AH=12h/BH=14h"LOCK"
  2111. --------Q-1512--BH0D-------------------------
  2112. INT 15 - TopView - SEND MESSAGE - "CLOSE" - CLOSE OBJECT
  2113.     AH = 12h
  2114.     BH = 0Dh
  2115.     BL = object
  2116.         00h handle is DWORD on top of stack
  2117.         timer:      close
  2118.         keyboard: detach from window and discard queued input
  2119.         pointer:  stop taking input
  2120.         panel:      close
  2121.         mailbox:  close, unlock, and discard any pending messages
  2122.         02h close given task's mailbox (task's handle on top of stack)
  2123.         03h close task's default mailbox
  2124.         04h close KEYBOARD object (handle on top of stack)
  2125.         05h close task's default KEYBOARD
  2126.         06h close given task's OBJECTQ (task's handle on top of stack)
  2127.         07h close current task's OBJECTQ
  2128. Return: STACK popped if handle passed on stack
  2129. Notes:    when an OBJECTQ is closed, each object in the OBJECTQ is sent an
  2130.       ERASE message (AH=12h/BH=0Eh)
  2131.     when a panel object is closed, the panel file and any panels currently
  2132.       in use are freed; window and keyboard objects created by APPLY are
  2133.       not affected, but field mode input ceases
  2134.     open but idle timer objects consume a small amount of CPU time
  2135. SeeAlso: AH=12h/BH=0Ch,AH=12h/BH=0Eh,AH=12h/BH=14h"LOCK"
  2136. --------Q-1512--BH0E-------------------------
  2137. INT 15 - TopView - SEND MESSAGE - "ERASE" - ERASE OBJECT
  2138.     AH = 12h
  2139.     BH = 0Eh
  2140.     BL = object
  2141.         00h handle is DWORD on top of stack
  2142.         window:      clear from scroll origin to end of window
  2143.         keyboard: discard input
  2144.         timer:      cancel current interval
  2145.         pointer:  discard all pending messages
  2146.         mailbox:  discard all pending messages
  2147.         01h clear task's default window from scroll origin to end
  2148.         02h discard all queued messages in mailbox (handle on top of stack)
  2149.         03h discard all queued messages in current task's default mailbox
  2150.         04h discard all input queued to KEYBOARD (handle on top of stack)
  2151.         05h discard all input queued to task's default KEYBOARD
  2152.         06h remove all objects from OBJECTQ (task's handle on top of stack)
  2153.         07h remove all objects from current task's OBJECTQ
  2154.         0Ch (DV 2.26+) clear window of task owning handle on top of stack
  2155.         0Dh (DV 2.26+) clear default window of parent of current task
  2156. Return: STACK popped if handle passed on stack
  2157. Note:    when an OBJECTQ is erased, each object in the OBJECTQ is also erased
  2158. SeeAlso: AH=12h/BH=02h
  2159. --------Q-1512--BH0F-------------------------
  2160. INT 15 - TopView - SEND MESSAGE - "STATUS" - GET OBJECT STATUS
  2161.     AH = 12h
  2162.     BH = 0Fh
  2163.     BL = object
  2164.         00h handle is DWORD on top of stack
  2165.         timer:     is it running?
  2166.         pointer: return status of last message
  2167.         panel:     verify success of last OPEN or APPLY
  2168.         02h return status of last msg READ from mailbox (handle on stack)
  2169.         03h return status of last msg READ from task's default mailbox
  2170.         04h get stat of last msg from task's KEYBOARD (task handle on stk)
  2171.         05h get status of last msg from task's default KEYBOARD
  2172.         06h return whether OBJECTQ is open or not (handle on top of stack)
  2173.         07h return whether task's default OBJECTQ is open or not
  2174. Return: DWORD on top of stack is status (any handle passed on stack popped)
  2175. Notes:    if object is a panel object, the status indicates the error code:
  2176.       00h successful
  2177.       14h panel name not in panel directory
  2178.       15h not enough memory to apply panel
  2179.       16h invalid panel format
  2180.       17h panel file already open
  2181.       81h-92h  DOS error codes+80h            \  codes > 80h indicate
  2182.       95h not enough memory to open panel file     > that the panel was
  2183.       98h null panel file name            /  not opened
  2184.     if object is a timer, the status is:
  2185.       00000000h open but not running
  2186.       40000000h open and running
  2187.       80000000h closed
  2188.     if object is an OBJECTQ, the status is:
  2189.       00000000h open
  2190.       80000000h closed
  2191.     if object is a keyboard in keystroke mode, the status is the extended
  2192.       character code (scan code) of the last keystroke
  2193.     if object is a keyboard in field mode, the status indicates the reason
  2194.       for the last return from the field manager
  2195.       00h Enter key pressed
  2196.       01h Button 1 or keystroke selection
  2197.       02h Button 2
  2198.       03h validation
  2199.       04h auto Enter on field
  2200.       1Bh Escape pressed
  2201.       46h ^Break pressed
  2202.       other: extended code for key terminating input
  2203.     the status of mailbox messages sent by the window manager is always 80h
  2204.     the status of a pointer message is the same as the status field in the
  2205.       message
  2206. SeeAlso: AH=12h/BH=04h"READ"
  2207. --------Q-1512--BH10-------------------------
  2208. INT 15 - TopView - SEND MESSAGE - "EOF" - GET OBJECT EOF STATUS
  2209.     AH = 12h
  2210.     BH = 10h
  2211.     BL = object
  2212.         00h handle is DWORD on top of stack
  2213.         window: return TRUE if logical cursor past end of window
  2214.         mailbox: ???
  2215.         01h returns TRUE if logical cursor past end of task's def window
  2216.         02h return ??? for task's mailbox (task's handle on top of stack)
  2217.         03h return ??? for current task's mailbox
  2218.         0Ch (DV 2.26+) check log crsr of window owning handle on top of stk
  2219.         0Dh (DV 2.26+) check log cursor of window of parent task
  2220. Return: DWORD on top of stack is status (any handle on stack has been popped)
  2221. --------Q-1512--BH11-------------------------
  2222. INT 15 - TopView - SEND MESSAGE - "AT" - POSITION OBJECT CURSOR
  2223.     AH = 12h
  2224.     BH = 11h
  2225.     BL = window for which to move cursor
  2226.         00h window's handle is DWORD on top of stack
  2227.         01h task's default window
  2228.         0Ch (DV 2.26+) default window of task owning handle on top of stack
  2229.         0Dh (DV 2.26+) default window of parent of current task
  2230.     STACK: DWORD column
  2231.            DWORD row
  2232. Return: STACK popped
  2233. --------Q-1512--BH11-------------------------
  2234. INT 15 - TopView - SEND MESSAGE - "SETNAME" - ASSIGN NAME TO MAILBOX
  2235.     AH = 12h
  2236.     BH = 11h
  2237.     BL = mailbox to name
  2238.         00h DWORD on top of stack is mailbox handle
  2239.         02h use given task's mailbox (task's handle on top of stack)
  2240.         03h use current task's default mailbox
  2241.     STACK: DWORD length of name
  2242.            DWORD address of name
  2243. Return: STACK popped
  2244. SeeAlso: AH=12h/BH=12h"GETNAME",AX=DE0Eh
  2245. --------Q-1512--BX1100-----------------------
  2246. INT 15 - TopView - SEND MESSAGE - "SETSCALE" - SET POINTER SCALE FACTOR
  2247.     AH = 12h
  2248.     BX = 1100h
  2249.     STACK: DWORD object handle for pointer object
  2250.            DWORD number of colums to scale pointer position to
  2251.            DWORD number of rows to scale pointer position to
  2252. Return: STACK popped
  2253. SeeAlso: AH=12h/BX=1200h
  2254. --------Q-1512--BH12-------------------------
  2255. INT 15 - TopView - SEND MESSAGE - "READN" - GET NEXT N OBJECT BYTES
  2256.     AH = 12h
  2257.     BH = 12h
  2258.     BL = window to read from
  2259.         00h handle is DWORD on top of stack
  2260.         01h read next N chars or attributes on task's default window
  2261.         0Ch (DV 2.26+) read window of task owning handle on top of stack
  2262.         0Dh (DV 2.26+) read default window of parent of current task
  2263.     STACK: DWORD count
  2264. Return: STACK: DWORD number of bytes actually read
  2265.            DWORD address of buffer containing data
  2266. Notes:    reading starts at the current logical cursor position; the cursor is
  2267.       updated to point at the character following the last one read
  2268.     any translucent blanks (FFh) which are visible on screen are changed
  2269.       to the character which is seen through them
  2270.     the string produced by the read is placed in an input buffer which may
  2271.       be reused by the next READ or READN of a window
  2272.     window stream opcodes D8h and D9h determine whether the read returns
  2273.       characters or attributes
  2274. SeeAlso: AH=12h/BH=04h"WINDOW",AH=12h/BH=05h"WINDOW"
  2275. --------Q-1512--BH12-------------------------
  2276. INT 15 - DESQview 2.50+ - SEND MESSAGE - "GETNAME" - GET NAME OF MAILBOX
  2277.     AH = 12h
  2278.     BH = 12h
  2279.     BL = mailbox for which to retrieve name
  2280.         00h DWORD on top of stack is mailbox handle
  2281.         02h use given task's mailbox (task's handle on top of stack)
  2282.         03h use current task's default mailbox
  2283.     STACK: DWORD length of buffer for name
  2284.            DWORD pointer to buffer
  2285. Return: STACK: DWORD length of returned name (or size of buffer, if less)
  2286. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2287. Note:    the returned name is not NUL-terminated
  2288. SeeAlso: AH=12h/BH=11h"SETNAME",AX=DE0Eh
  2289. --------Q-1512--BX1200-----------------------
  2290. INT 15 - TopView - SEND MESSAGE - "GETSCALE" - GET POINTER SCALE FACTOR
  2291.     AH = 12h
  2292.     BX = 1200h
  2293.     STACK: DWORD object handle for pointer
  2294. Return: STACK: DWORD pointer pos scaled as if window were this many colums wide
  2295.            DWORD pointer pos scaled as if window were this many rows high
  2296. SeeAlso: AH=12h/BX=1100h
  2297. --------Q-1512--BH13-------------------------
  2298. INT 15 - TopView - SEND MESSAGE - "REDRAW" - REDRAW WINDOW
  2299.     AH = 12h
  2300.     BH = 13h
  2301.     BL = window object
  2302.         00h DWORD on top of stack is handle for window to redraw
  2303.         01h redraw task's default window
  2304.         0Ch (DV 2.26+) redraw window of task owning handle on top of stack
  2305.         0Dh (DV 2.26+) redraw default window of parent of current task
  2306. Return: STACK popped if handle was passed on stack
  2307. SeeAlso: AH=12h/BH=05h"WINDOW",AH=12h/BH=0Eh
  2308. --------Q-1512--BH13-------------------------
  2309. INT 15 - DESQview 2.50+ - SEND MESSAGE - "READINTO" - GET NEXT MAIL MESSAGE
  2310.     AH = 12h
  2311.     BH = 13h
  2312.     BL = mailbox from which to read
  2313.         00h DWORD on top of stack is mailbox handle
  2314.         02h use given task's mailbox (task's handle on top of stack)
  2315.         03h use current task's default mailbox
  2316.     STACK: DWORD size of buffer in bytes
  2317.            DWORD pointer to buffer
  2318. Return: STACK: DWORD number of bytes read
  2319. Program: DESQview 2.5x is distributed as part of DESQview/X 1.0x
  2320. Notes:    this call blocks if no input is available, but will return less than
  2321.       the requested number of bytes if some (but insufficient) data is
  2322.       available
  2323.     use this call instead of AH=12h/BH=04h if the mailbox has flag bits
  2324.       4 or 5 set, as common memory may be exhausted by that call when
  2325.       attempting to read the next message
  2326. SeeAlso: AH=12h/BH=04h"READ",AH=12h/BH=05h,AH=12h/BH=16h
  2327. --------Q-1512--BX1300-----------------------
  2328. INT 15 - TopView - SEND MESSAGE - "SETICON" - SPECIFY POINTER ICON
  2329.     AH = 12h
  2330.     BX = 1300h
  2331.     STACK: DWORD object handle for pointer
  2332.            DWORD character to use for pointer
  2333. Return: STACK popped
  2334. --------Q-1512--BH14-------------------------
  2335. INT 15 - TopView - SEND MESSAGE - "SETESC" - SET ESCAPE ROUTINE ADDRESS
  2336.     AH = 12h
  2337.     BH = 14h
  2338.     BL = message modifier
  2339.         00h handle is DWORD on top of stack
  2340.         01h define user stream
  2341.         04h intercept keystrokes from KEYBOARD to window (handle on stack)
  2342.         05h intercept keystrokes from task's default KEYBOARD to a window
  2343.     STACK: (if window)   DWORD user stream number (14h-1Fh)
  2344.                  DWORD address of FAR user stream handler
  2345.            (if keyboard) DWORD address of FAR filter function (see #00452)
  2346. Return: STACK popped
  2347.  
  2348. (Table 00452)
  2349. Values keyboard filter function is called with when keyboard is in field mode:
  2350.     AL = character
  2351.     AH = 00h or extended ASCII code if AL = 00h
  2352.     BL = field number
  2353.     CH = cursor column
  2354.     CL = cursor row
  2355.     DL = field type modifier (sixth item in field table entry)
  2356.     DH = seventh item in field table entry
  2357.     ES:SI = window's handle
  2358.     DS:DI -> field table entry for field containing the cursor
  2359. Return: AH = action to take
  2360.         00h use keystroke
  2361.         01h ignore keystroke
  2362.         FFh beep and ignore keystroke
  2363. Note: the filter function is not allowed to make INT 15, DOS, or BIOS calls
  2364. --------Q-1512--BH14-------------------------
  2365. INT 15 - TopView - SEND MESSAGE - "LOCK" - REQUEST EXCLUSIVE ACCESS TO RESOURCE
  2366.     AH = 12h
  2367.     BH = 14h
  2368.     BL = object
  2369.         00h mailbox handle is DWORD on top of stack
  2370.         02h use given task's mailbox (task's handle on top of stack)
  2371.         03h use current task's default mailbox
  2372. Return: STACK popped if BL=00h
  2373. Note:    release exclusive access by sending CLOSE message to mailbox
  2374.     access may be requested multiple times, and requires multiple CLOSEs
  2375. SeeAlso: AH=12h/BH=0Dh
  2376. --------Q-1512--BH15-------------------------
  2377. INT 15 - DESQview v2.20+ - SEND MESSAGE - "SETFLAGS" - SET OBJECT FLAGS
  2378.     AH = 12h
  2379.     BH = 15h
  2380.     BL = object
  2381.         00h DWORD on top of stack
  2382.         mailbox, keyboard, or pointer only
  2383.         02h mailbox for task whose handle is on top of stack
  2384.         03h mailbox for current task
  2385.         04h keyboard for task whose handle is on top of stack
  2386.         05h keyboard for current task
  2387.     STACK: DWORD flags (see #00453,#00454)
  2388. Return: STACK popped
  2389. Notes:    only available if the API level has been set to at least 2.20
  2390.     equivalent to performing SUBFROM and ADDTO calls on the object
  2391.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2392.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  2393. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=16h
  2394.  
  2395. Bitfields for DESQview mailbox object flags:
  2396. Bit(s)    Description    (Table 00453)
  2397.  0    all mail messages in common memory
  2398.  1    allow write even if closed
  2399.  2    don't erase messages when mailbox closed
  2400.  4    (DV/X) append messages with like status and sender (stream-oriented
  2401.       mail)
  2402.  5    (DV/X) store mail in expanded memory (pool grows as needed)
  2403.  6    (DV/X) make mailbox into non-owned mailbox
  2404.  
  2405. Bitfields for DESQview keyboard object flags:
  2406. Bit(s)    Description    (Table 00454)
  2407.  5    exclusive input when keyboard in use for input
  2408. --------Q-1512--BH16-------------------------
  2409. INT 15 - DESQview v2.20+ - SEND MESSAGE - "GETFLAGS" - GET OBJECT FLAGS
  2410.     AH = 12h
  2411.     BH = 16h
  2412.     BL = object
  2413.         00h DWORD on top of stack
  2414.         mailbox, keyboard, or pointer only
  2415.         02h mailbox for task whose handle is on top of stack
  2416.         03h mailbox for current task
  2417.         04h keyboard for task whose handle is on top of stack
  2418.         05h keyboard for current task
  2419. Return: STACK: DWORD current control flags (see #00453,#00454)
  2420. Notes:    only available if the API level has been set to at least 2.20
  2421.     if a mailbox has bits 4 or 5 set, you must use "READINTO" rather than
  2422.       "READ" (see AH=12h/BH=13h"READINTO") to retrieve messages
  2423. SeeAlso: AH=12h/BH=0Ah,AH=12h/BH=0Bh,AH=12h/BH=13h"READINTO",AH=12h/BH=15h
  2424. --------Q-1512--BH17-------------------------
  2425. INT 15 - DESQview v2.42-2.52 - BUG
  2426.     AH = 12h
  2427.     BH = 17h
  2428.     BL = object
  2429.         00h DWORD on top of stack
  2430.         mailbox, keyboard, or pointer only
  2431.         02h mailbox for task whose handle is on top of stack
  2432.         03h mailbox for current task
  2433.         04h keyboard for task whose handle is on top of stack
  2434.         05h keyboard for current task
  2435. Return: STACK popped if handle passed on stack
  2436. Notes:    due to a fencepost error, message 17h is accepted for mailboxes,
  2437.       keyboards, and pointers, but causes a random branch
  2438.     DESQview v2.50-2.52 are distributed as part of DESQview/X v1.02
  2439. --------Q-1512--BH80-------------------------
  2440. INT 15 - DESQview v2.50+ - SEND MESSAGE 00h WITH ERROR RECOVERY
  2441.     AH = 12h
  2442.     BH = 80h
  2443. Note:    this function is identical to AH=12h/BH=00h, except that DESQview will
  2444.       not pop up a "Programming Error" window, instead returning an error
  2445.       code in AL (see #00455)
  2446. SeeAlso: AH=12h/BH=00h
  2447.  
  2448. (Table 00455)
  2449. Values for DESQview error code:
  2450.  00h    no error
  2451.  01h    invalid values
  2452.  02h    alias invalid
  2453.  03h    handle valid but wrong type
  2454.  04h    invalid handle
  2455. --------Q-1512--BH81-------------------------
  2456. INT 15 - DESQview v2.50+ - SEND MESSAGE 01h WITH ERROR RECOVERY
  2457.     AH = 12h
  2458.     BH = 81h
  2459. Note:    this function is identical to AH=12h/BH=01h, except that DESQview will
  2460.       not pop up a "Programming Error" window, instead returning an error
  2461.       code in AL (see #00455)
  2462. SeeAlso: AH=12h/BH=01h
  2463. --------Q-1512--BH82-------------------------
  2464. INT 15 - DESQview v2.50+ - SEND MESSAGE 02h WITH ERROR RECOVERY
  2465.     AH = 12h
  2466.     BH = 82h
  2467. Note:    this function is identical to AH=12h/BH=02h, except that DESQview will
  2468.       not pop up a "Programming Error" window, instead returning an error
  2469.       code in AL (see #00455)
  2470. SeeAlso: AH=12h/BH=02h
  2471. --------Q-1512--BH83-------------------------
  2472. INT 15 - DESQview v2.50+ - SEND MESSAGE 03h WITH ERROR RECOVERY
  2473.     AH = 12h
  2474.     BH = 83h
  2475. Note:    this function is identical to AH=12h/BH=03h, except that DESQview will
  2476.       not pop up a "Programming Error" window, instead returning an error
  2477.       code in AL (see #00455)
  2478. SeeAlso: AH=12h/BH=03h,AH=12h/BX=0300h
  2479. --------Q-1512--BH84-------------------------
  2480. INT 15 - DESQview v2.50+ - SEND MESSAGE 04h WITH ERROR RECOVERY
  2481.     AH = 12h
  2482.     BH = 84h
  2483. Note:    this function is identical to AH=12h/BH=04h, except that DESQview will
  2484.       not pop up a "Programming Error" window, instead returning an error
  2485.       code in AL (see #00455)
  2486. SeeAlso: AH=12h/BH=04h,AH=12h/BX=0400h
  2487. --------Q-1512--BH85-------------------------
  2488. INT 15 - DESQview v2.50+ - SEND MESSAGE 05h WITH ERROR RECOVERY
  2489.     AH = 12h
  2490.     BH = 85h
  2491. Note:    this function is identical to AH=12h/BH=05h, except that DESQview will
  2492.       not pop up a "Programming Error" window, instead returning an error
  2493.       code in AL (see #00455)
  2494. SeeAlso: AH=12h/BH=05h
  2495. --------Q-1512--BH86-------------------------
  2496. INT 15 - DESQview v2.50+ - SEND MESSAGE 06h WITH ERROR RECOVERY
  2497.     AH = 12h
  2498.     BH = 86h
  2499. Note:    this function is identical to AH=12h/BH=06h, except that DESQview will
  2500.       not pop up a "Programming Error" window, instead returning an error
  2501.       code in AL (see #00455)
  2502. SeeAlso: AH=12h/BH=06h
  2503. --------Q-1512--BH87-------------------------
  2504. INT 15 - DESQview v2.50+ - SEND MESSAGE 07h WITH ERROR RECOVERY
  2505.     AH = 12h
  2506.     BH = 87h
  2507. Note:    this function is identical to AH=12h/BH=07h, except that DESQview will
  2508.       not pop up a "Programming Error" window, instead returning an error
  2509.       code in AL (see #00455)
  2510. SeeAlso: AH=12h/BH=07h
  2511. --------Q-1512--BH88-------------------------
  2512. INT 15 - DESQview v2.50+ - SEND MESSAGE 08h WITH ERROR RECOVERY
  2513.     AH = 12h
  2514.     BH = 88h
  2515. Note:    this function is identical to AH=12h/BH=08h, except that DESQview will
  2516.       not pop up a "Programming Error" window, instead returning an error
  2517.       code in AL (see #00455)
  2518. SeeAlso: AH=12h/BH=08h
  2519. --------Q-1512--BH89-------------------------
  2520. INT 15 - DESQview v2.50+ - SEND MESSAGE 09h WITH ERROR RECOVERY
  2521.     AH = 12h
  2522.     BH = 89h
  2523. Note:    this function is identical to AH=12h/BH=09h, except that DESQview will
  2524.       not pop up a "Programming Error" window, instead returning an error
  2525.       code in AL (see #00455)
  2526. SeeAlso: AH=12h/BH=09h
  2527. --------Q-1512--BH8A-------------------------
  2528. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ah WITH ERROR RECOVERY
  2529.     AH = 12h
  2530.     BH = 8Ah
  2531. Note:    this function is identical to AH=12h/BH=0Ah, except that DESQview will
  2532.       not pop up a "Programming Error" window, instead returning an error
  2533.       code in AL (see #00455)
  2534. SeeAlso: AH=12h/BH=0Ah
  2535. --------Q-1512--BH8B-------------------------
  2536. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Bh WITH ERROR RECOVERY
  2537.     AH = 12h
  2538.     BH = 8Bh
  2539. Note:    this function is identical to AH=12h/BH=0Bh, except that DESQview will
  2540.       not pop up a "Programming Error" window, instead returning an error
  2541.       code in AL (see #00455)
  2542. SeeAlso: AH=12h/BH=0Bh
  2543. --------Q-1512--BH8C-------------------------
  2544. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Ch WITH ERROR RECOVERY
  2545.     AH = 12h
  2546.     BH = 8Ch
  2547. Note:    this function is identical to AH=12h/BH=0Ch, except that DESQview will
  2548.       not pop up a "Programming Error" window, instead returning an error
  2549.       code in AL (see #00455)
  2550. SeeAlso: AH=12h/BH=0Ch
  2551. --------Q-1512--BH8D-------------------------
  2552. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Dh WITH ERROR RECOVERY
  2553.     AH = 12h
  2554.     BH = 8Dh
  2555. Note:    this function is identical to AH=12h/BH=0Dh, except that DESQview will
  2556.       not pop up a "Programming Error" window, instead returning an error
  2557.       code in AL (see #00455)
  2558. SeeAlso: AH=12h/BH=0Dh
  2559. --------Q-1512--BH8E-------------------------
  2560. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Eh WITH ERROR RECOVERY
  2561.     AH = 12h
  2562.     BH = 8Eh
  2563. Note:    this function is identical to AH=12h/BH=0Eh, except that DESQview will
  2564.       not pop up a "Programming Error" window, instead returning an error
  2565.       code in AL (see #00455)
  2566. SeeAlso: AH=12h/BH=0Eh
  2567. --------Q-1512--BH8F-------------------------
  2568. INT 15 - DESQview v2.50+ - SEND MESSAGE 0Fh WITH ERROR RECOVERY
  2569.     AH = 12h
  2570.     BH = 8Fh
  2571. Note:    this function is identical to AH=12h/BH=0Fh, except that DESQview will
  2572.       not pop up a "Programming Error" window, instead returning an error
  2573.       code in AL (see #00455)
  2574. SeeAlso: AH=12h/BH=0Fh
  2575. --------Q-1512--BH90-------------------------
  2576. INT 15 - DESQview v2.50+ - SEND MESSAGE 10h WITH ERROR RECOVERY
  2577.     AH = 12h
  2578.     BH = 90h
  2579. Note:    this function is identical to AH=12h/BH=10h, except that DESQview will
  2580.       not pop up a "Programming Error" window, instead returning an error
  2581.       code in AL (see #00455)
  2582. SeeAlso: AH=12h/BH=10h
  2583. --------Q-1512--BH91-------------------------
  2584. INT 15 - DESQview v2.50+ - SEND MESSAGE 11h WITH ERROR RECOVERY
  2585.     AH = 12h
  2586.     BH = 91h
  2587. Note:    this function is identical to AH=12h/BH=11h, except that DESQview will
  2588.       not pop up a "Programming Error" window, instead returning an error
  2589.       code in AL (see #00455)
  2590. SeeAlso: AH=12h/BH=11h,AH=12h/BX=1100h
  2591. --------Q-1512--BH92-------------------------
  2592. INT 15 - DESQview v2.50+ - SEND MESSAGE 12h WITH ERROR RECOVERY
  2593.     AH = 12h
  2594.     BH = 92h
  2595. Note:    this function is identical to AH=12h/BH=12h, except that DESQview will
  2596.       not pop up a "Programming Error" window, instead returning an error
  2597.       code in AL (see #00455)
  2598. SeeAlso: AH=12h/BH=12h,AH=12h/BX=1200h
  2599. --------Q-1512--BH93-------------------------
  2600. INT 15 - DESQview v2.50+ - SEND MESSAGE 13h WITH ERROR RECOVERY
  2601.     AH = 12h
  2602.     BH = 93h
  2603. Note:    this function is identical to AH=12h/BH=13h, except that DESQview will
  2604.       not pop up a "Programming Error" window, instead returning an error
  2605.       code in AL (see #00455)
  2606. SeeAlso: AH=12h/BH=13h
  2607. --------Q-1512--BH94-------------------------
  2608. INT 15 - DESQview v2.50+ - SEND MESSAGE 14h WITH ERROR RECOVERY
  2609.     AH = 12h
  2610.     BH = 94h
  2611. Note:    this function is identical to AH=12h/BH=14h, except that DESQview will
  2612.       not pop up a "Programming Error" window, instead returning an error
  2613.       code in AL (see #00455)
  2614. SeeAlso: AH=12h/BH=14h
  2615. --------Q-1512--BH95-------------------------
  2616. INT 15 - DESQview v2.50+ - SEND MESSAGE 15h WITH ERROR RECOVERY
  2617.     AH = 12h
  2618.     BH = 95h
  2619. Note:    this function is identical to AH=12h/BH=15h, except that DESQview will
  2620.       not pop up a "Programming Error" window, instead returning an error
  2621.       code in AL (see #00455)
  2622. SeeAlso: AH=12h/BH=15h
  2623. --------Q-1512--BH96-------------------------
  2624. INT 15 - DESQview v2.50+ - SEND MESSAGE 16h WITH ERROR RECOVERY
  2625.     AH = 12h
  2626.     BH = 96h
  2627. Note:    this function is identical to AH=12h/BH=16h, except that DESQview will
  2628.       not pop up a "Programming Error" window, instead returning an error
  2629.       code in AL (see #00455)
  2630. SeeAlso: AH=12h/BH=16h
  2631. --------T-1513-------------------------------
  2632. INT 15 - VMiX - "sys_wake" - WAKE SLEEPING PROCESS
  2633.     AH = 13h
  2634.     STACK:    WORD    process ID
  2635. Return: AX = status (SYS_OK or SYS_ERROR)
  2636. SeeAlso: AH=12h"VMiX"
  2637. --------T-1513-------------------------------
  2638. INT 15 - MultiDOS Plus - GET TASK CONTROL BLOCK
  2639.     AH = 13h
  2640. Return: BX:AX -> task control block (see #00456)
  2641. SeeAlso: AH=15h"MultiDOS"
  2642.  
  2643. Format of MultiDOS Plus v4.0 task control block:
  2644. Offset    Size    Description    (Table 00456)
  2645.  00h    DWORD    pointer to next TCB
  2646.  04h  8 BYTEs    ASCIZ task name
  2647.  0Ch  2 BYTEs    ???
  2648.  0Eh    WORD    task PSP segment
  2649.  10h    WORD    abort/suspend flags
  2650.  12h    WORD    current screen segment (see AH=0Bh,AH=0Ch)
  2651.  14h    WORD    priority level (0000h-FFFEh)
  2652.  16h    WORD    time slice counter
  2653.  18h  2 BYTEs    ???
  2654.  1Ah    WORD    suspend timer value
  2655.  1Ch    WORD    stack segment
  2656.  1Eh    WORD    stack pointer
  2657.  20h    WORD    display type
  2658.  22h    WORD    display memory
  2659.  24h  2 BYTEs    ???
  2660.  26h    WORD    termination count
  2661.  28h    WORD    equipment flag for BIO10 driver
  2662.  2Ah    BYTE    background CRT mode
  2663.  2Bh    WORD    screen width in columns
  2664.  2Dh    WORD    screen size in bytes
  2665.  2Fh    WORD    segment of physical screen memory
  2666.  31h 16 BYTEs    eight cursor positions
  2667.  41h    WORD    current cursor shape
  2668.  43h    BYTE    active display page
  2669.  44h    WORD    CRT controller I/O port base
  2670.  46h  2 BYTEs    ???
  2671.  48h    WORD    foreground task flag
  2672.  4Ah  6 BYTEs    ???
  2673.  50h    WORD    saved video segment (see AH=0Bh,AH=0Ch)
  2674.  52h    DWORD    old INT 22
  2675.  56h    DWORD    old INT 23
  2676.  5Ah    DWORD    old INT 24
  2677.  5Eh    WORD    top of memory for task
  2678.  60h  4 BYTEs    ???
  2679.  64h    WORD    DTA segment (see INT 21/AH=1Ah)
  2680.  66h    WORD    DTA offset
  2681.  68h  4 BYTEs    ???
  2682.  6Ch    BYTE    current ANSI.SYS attribute
  2683.  6Dh    BYTE    current ANSI.SYS column
  2684.  6Eh    BYTE    current ANSI.SYS row
  2685.  6Fh    BYTE    current ANSI.SYS display state
  2686.  70h    BYTE    maximum ANSI.SYS columns
  2687.  71h    BYTE    current ANSI.SYS page
  2688.  72h    WORD    saved ANSI.SYS cursor position
  2689.  74h    BYTE    ANSI.SYS parameter buffer index
  2690.  75h    BYTE    current ANSI.SYS screen mode
  2691.  76h    BYTE    ANSI.SYS wrap flag
  2692.  77h  6 BYTEs    ANSI.SYS parameter buffer
  2693.  7Dh    BYTE    ANSI.SYS keyboard DSR state
  2694.  7Eh  7 BYTEs    ANSI.SYS keyboard DSR buffer
  2695.  85h  3 BYTEs    ???
  2696.  88h 16 BYTEs    request header for DOS driver calls
  2697.  98h 14 BYTEs    ???
  2698.  A6h    WORD    segment of EMS map if EMS task
  2699.  A8h    WORD    flag: task makes EMS calls
  2700.  AAh    WORD    EMS handle for task
  2701.  ACh    WORD    keyboard shift state
  2702.  AEh 12 BYTEs    ???
  2703.  BAh    WORD    TCB of parent if child task
  2704.  BCh    WORD    termination code
  2705.  BEh    WORD    COM port number
  2706.  C0h  4 BYTEs    ???
  2707.  C4h    WORD    current IRQ number
  2708.  C6h  2 BYTEs    ???
  2709.  C8h    WORD    miscellaneous flag word
  2710.  CAh  2 BYTEs    ???
  2711.  CCh    DWORD    old INT 10
  2712.  D0h    WORD    EMS alternate map set number
  2713.  D2h 414 BYTEs    DOS current disk and directory context (optional)
  2714. --------T-1514-------------------------------
  2715. INT 15 - VMiX - "sys_clrwindow" - CLEAR WINDOW
  2716.     AH = 14h
  2717.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  2718.         WORD    bottom right corner of window (high = row, low = col)
  2719. Return: AX = status (SYS_OK)
  2720. Note:    clears window to color set with "sys_setcolors" (AH=18h)
  2721. SeeAlso: AH=15h"VMiX",AH=16h"VMiX",AH=18h"VMiX",AH=1Fh"VMiX"
  2722. --------T-1514-------------------------------
  2723. INT 15 - MultiDOS Plus - CHECK IF MultiDOS FOREGROUND OR BACKGROUND
  2724.     AH = 14h
  2725. Return: AX = current state
  2726.         0000h MultiDOS Plus command prompt is background task
  2727.         0001h command prompt is foreground task
  2728. SeeAlso: AH=0Bh"MultiDOS"
  2729. --------T-1515-------------------------------
  2730. INT 15 - VMiX - "sys_setbwindow" - SET BANNER WINDOW MESSAGE
  2731.     AH = 15h
  2732.     STACK:    DWORD    pointer to ASCIZ banner message for top of screen
  2733. Return: AX = status (SYS_OK)
  2734. SeeAlso: AH=14h"VMiX",AH=16h"VMiX"
  2735. --------T-1515-------------------------------
  2736. INT 15 - MultiDOS Plus - GET SYSTEM BLOCK
  2737.     AH = 15h
  2738. Return: BX:AX -> system block (see #00457)
  2739. SeeAlso: AH=13h"MultiDOS"
  2740.  
  2741. Format of MultiDOS Plus 4.0 system block:
  2742. Offset    Size    Description    (Table 00457)
  2743.  00h    WORD    segment of system control block
  2744.  02h    WORD    redirection flag set by /NOREDIRECT
  2745.  04h    WORD    no-INT 10 flag set by /NO10
  2746.  06h    DWORD    old INT 10
  2747.  0Ah    DWORD    new INT 10
  2748.  0Eh    DWORD    pointer to WORD with current TCB offset (see #00456)
  2749.  12h    DWORD    pointer to WORD with idle task TCB offset
  2750.  16h    DWORD    pointer to WORD with foreground TCB offset (see #00456)
  2751.  1Ah    DWORD    pointer to WORD with MultiDOS TCB offset (see #00456)
  2752.  1Eh    WORD    Task Control Block size
  2753.  20h    WORD    number of TCBs
  2754.  22h    WORD    flag: EMS present
  2755.  24h    WORD    EMS page frame base segment
  2756.  26h    WORD    16K pages in EMS page frame
  2757.  28h    WORD    base segment for conventional memory tasks
  2758.  2Ah    WORD    conventional memory size in paragraphs
  2759.  2Ch    DWORD    pointer to list of queue pointers
  2760. --------T-1516-------------------------------
  2761. INT 15 - VMiX - "sys_setwindow" - SET ROOT WINDOW SIZE AND HOME CURSOR
  2762.     AH = 16h
  2763.     STACK:    DWORD    pointer to I/O Request Packet
  2764.         WORD    top left corner of window (high byte = row, low = col)
  2765.         WORD    bottom right corner of window (high = row, low = col)
  2766. Return: AX = status (SYS_OK or SYS_ERROR)
  2767. SeeAlso: AH=14h"VMiX",AH=17h"VMiX"
  2768. --------T-1516-------------------------------
  2769. INT 15 - MultiDOS Plus - INITIALIZATION
  2770.     AH = 16h
  2771. Note:    used internally during initialization; any other calls will cause
  2772.       unpredictable results
  2773. --------T-1517-------------------------------
  2774. INT 15 - VMiX - "sys_getcolors" - GET CONSOLE WINDOW COLORS
  2775.     AH = 17h
  2776. Return: AH = foreground color
  2777.     AL = background color
  2778. SeeAlso: AH=16h"VMiX",AH=18h"VMiX"
  2779. --------T-1517-------------------------------
  2780. INT 15 - MultiDOS Plus - MAP IRQ
  2781.     AH = 17h
  2782.     AL = IRQ to map (01h-0Fh)
  2783.     BX = offset of task control block (see #00456) to associate with IRQ
  2784. Return: AX = status
  2785.         0000h successful
  2786.         other invalid IRQ
  2787. Note:    the EMS map of the specified TCB is associated with the given interrupt
  2788. SeeAlso: AH=18h"MultiDOS",AH=19h"MultiDOS"
  2789. --------T-1518-------------------------------
  2790. INT 15 - VMiX - "sys_setcolors" - SET CONSOLE COLORS
  2791.     AH = 18h
  2792.     STACK:    WORD    new background/foreground colors
  2793.             bits 3-0: foreground
  2794.             bits 7-4: background
  2795.             bits 15-8: unused
  2796. Return: AX = color
  2797. SeeAlso: AH=14h"VMiX",AH=17h"VMiX",AH=19h"VMiX"
  2798. --------T-1518-------------------------------
  2799. INT 15 - MultiDOS Plus - UNMAP IRQ
  2800.     AH = 18h
  2801.     AL = IRQ to unmap (01h-0Fh)
  2802. Return: AX = status
  2803.         0000h successful
  2804.         0001h invalid IRQ
  2805. Note:    results are unpredictable if the IRQ has not been mapped
  2806. SeeAlso: AH=17h"MultiDOS",AH=19h"MultiDOS"
  2807. --------T-1519-------------------------------
  2808. INT 15 - VMiX v2+ - "sys_setconwn" - SET WINDOW COLORS
  2809.     AH = 19h
  2810.     STACK:    WORD    new background/foreground colors
  2811.             bits 3-0: foreground
  2812.             bits 7-4: background
  2813.             bits 15-8: unused
  2814. Return: AX = color
  2815. SeeAlso: AH=18h"VMiX"
  2816. --------T-1519-------------------------------
  2817. INT 15 - MultiDOS Plus - UNMAP ALL IRQs
  2818.     AH = 19h
  2819. Return: AX destroyed
  2820. Note:    for MultiDOS internal use only
  2821. SeeAlso: AH=17h"MultiDOS",AH=18h"MultiDOS"
  2822. --------T-151A-------------------------------
  2823. INT 15 - VMiX v2+ - "sys_sint" - INVOKE SOFTWARE INTERRUPT
  2824.     AH = 1Ah
  2825.     STACK:    WORD    interrupt number
  2826.         DWORD    pointer to register structure
  2827. Return: AX = returned flags
  2828. --------T-151A-------------------------------
  2829. INT 15 - MultiDOS Plus - MAP SEMAPHORE NAME TO NUMBER
  2830.     AH = 1Ah
  2831.     DS:SI -> 8-byte name
  2832. Return: AL = status
  2833.         00h successful
  2834.         AH = semaphore number (20h-3Fh)
  2835.         04h out of string space
  2836. Notes:    all eight bytes of the name are significant
  2837.     if the name does not already exist, it is added to the name table and
  2838.       associated with a free semaphore number
  2839.     names cannot be destroyed
  2840. SeeAlso: AH=1Bh"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2841. --------T-151B-------------------------------
  2842. INT 15 - VMiX v2+ - "sys_blkmov" - MOVE MEMORY BLOCK
  2843.     AH = 1Bh
  2844.     STACK:    DWORD    source address
  2845.         DWORD    destination address
  2846.         WORD    number of words to move
  2847. Return: nothing
  2848. --------T-151B-------------------------------
  2849. INT 15 - MultiDOS Plus - REQUEST RESOURCE SEMAPHORE BY NAME
  2850.     AH = 1Bh
  2851.     DS:SI -> 8-byte name
  2852. Return: AH = status
  2853.         00h successful
  2854.         02h invalid semaphore number
  2855.         03h caller already owns semaphore
  2856.         04h out of string space
  2857. Notes:    (see AH=01h"MultiDOS")
  2858.     equivalent to AH=1Ah followed by AH=01h
  2859. SeeAlso: AH=01h"MultiDOS",AH=1Ah"MultiDOS",AH=1Ch"MultiDOS",AH=1Dh"MultiDOS"
  2860. --------T-151C-------------------------------
  2861. INT 15 - VMiX v2+ - "sys_bitblt" - PUT GRAPHICAL OBJECT AT CURSOR POSITION
  2862.     AH = 1Ch
  2863.     STACK:    WORD    AND/OR pixel with background (00h = OR, 01h = AND)
  2864.         DWORD    pointer to object bitmap
  2865.         WORD    object width in pixels
  2866.         WORD    object height in pixels
  2867. Return: nothing
  2868. SeeAlso: AH=1Dh"VMiX"
  2869. --------T-151C-------------------------------
  2870. INT 15 - MultiDOS Plus - RELEASE RESOURCE SEMAPHORE BY NAME
  2871.     AH = 1Ch
  2872.     DS:SI -> 8-byte name
  2873. Return: AH = status
  2874.         00h successful
  2875.         01h not semaphore owner
  2876.         02h invalid semaphore number
  2877.         04h out of string space
  2878. Notes:    (see AH=02h"MultiDOS")
  2879.     equivalent to AH=1Ah followed by AH=02h
  2880. SeeAlso: AH=02h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Dh"MultiDOS"
  2881. --------T-151D-------------------------------
  2882. INT 15 - VMiX v2+ - "sys_getfont" - GET CURRENT CONSOLE GRAPHICS FONT
  2883.     AH = 1Dh
  2884. Return: AX = current font number (00h-03h)
  2885. SeeAlso: AH=1Ch"VMiX",AH=1Eh"VMiX"
  2886. --------T-151D-------------------------------
  2887. INT 15 - MultiDOS Plus - TEST RESOURCE SEMAPHORE BY NAME
  2888.     AH = 1Dh
  2889.     DS:SI -> 8-byte name
  2890. Return: AH = status
  2891.         00h semaphore not in use
  2892.         01h semaphore owned by another task
  2893.         02h invalid semaphore number
  2894.         03h caller owns semaphore
  2895.         04h out of string space
  2896. Notes:    (see AH=10h"MultiDOS")
  2897.     equivalent to AH=1Ah followed by AH=10h
  2898. SeeAlso: AH=10h"MultiDOS",AH=1Ah"MultiDOS",AH=1Bh"MultiDOS",AH=1Ch"MultiDOS"
  2899. --------T-151E-------------------------------
  2900. INT 15 - VMiX v2+ - "sys_setfont" - SET CONSOLE GRAPHICS FONT
  2901.     AH = 1Eh
  2902.     STACK: WORD new font number (00h-03h)
  2903. Return: AX = current font number (00h-03h)
  2904. SeeAlso: AH=1Dh"VMiX"
  2905. --------T-151E00-----------------------------
  2906. INT 15 - MultiDOS Plus - CLEAR EVENT COUNTER
  2907.     AX = 1E00h
  2908.     DX = event/trigger number (00h-3Fh)
  2909. Return: AH = status
  2910.         00h successful
  2911. SeeAlso: AX=1E01h,AX=1E02h
  2912. --------T-151E01-----------------------------
  2913. INT 15 - MultiDOS Plus - TRIGGER EVENT
  2914.     AX = 1E01h
  2915.     DX = event/trigger number (00h-3Fh)
  2916. Return: AH = status
  2917.         00h successful
  2918.         01h invalid event/trigger number
  2919. Notes:    schedules any task waiting for event; if no task is waiting, the event
  2920.       counter is incremented (and will roll over if it was 65535)
  2921.     may be invoked by interrupt handler
  2922. SeeAlso: AX=1E00h,AX=1E02h
  2923. --------T-151E02-----------------------------
  2924. INT 15 - MultiDOS Plus - WAIT FOR EVENT
  2925.     AX = 1E02h
  2926.     DX = event/trigger number (00h-3Fh)
  2927. Return: AH = status
  2928.         00h successful
  2929.         01h invalid event/trigger number
  2930. Note:    if the event counter is zero, the task is suspended until the event is
  2931.       triggered with AX=1E01h; else, the counter is decremented and the
  2932.       call returns immediately
  2933. SeeAlso: AX=1E00h,AX=1E01h
  2934. --------T-151E08-----------------------------
  2935. INT 15 - MultiDOS Plus 4.01 - SET CONTEXT-SWITCH FUNCTIONS
  2936.     AX = 1E08h
  2937.     DX:BX -> context save handler (see #00458)
  2938.     DX:CX -> context restore handler (see #00458)
  2939. Return: nothing
  2940. Note:    handlers may be removed by setting addresses to 0000h:0000h
  2941.  
  2942. (Table 00458)
  2943. Values MultiDOS Plus context-switch handlers are called with:
  2944.     ES:BX -> task's TCB
  2945. Return: all registers preserved
  2946. --------T-151F-------------------------------
  2947. INT 15 - VMiX v2.???+ - "sys_scrollwin" - SCROLL WINDOW
  2948.     AH = 1Fh
  2949.     STACK:    WORD    top left corner of window (high byte = row, low = col)
  2950.         WORD    bottom right corner of window
  2951. Return: AX = status (SYS_OK)
  2952. SeeAlso: AH=14h"VMiX",AH=18h"VMiX"
  2953. --------T-151F-------------------------------
  2954. INT 15 - MultiDOS Plus v4.01 - GET MEMORY PARAMETERS
  2955.     AH = 1Fh
  2956. Return: BX = first segment of conventional memory
  2957.     DX = first segment of EMS swap frame into which MultiDOS will load
  2958.         programs
  2959. --------T-1520-------------------------------
  2960. INT 15 - MultiDOS Plus v4.01 - CHECK IF MULTITASKING ENABLED
  2961.     AH = 20h
  2962. Return: AX = current state
  2963.         0000h multitasking enabled
  2964.         other TCB of task that disabled multitasking
  2965. SeeAlso: AH=0Dh"MultiDOS",AH=13h"MultiDOS"
  2966. --------c-152000-----------------------------
  2967. INT 15 U - DOS 3.0+ PRINT.COM - DISABLE CRITICAL REGION FLAG
  2968.     AX = 2000h
  2969. Return: nothing
  2970. Desc:    stop setting user flag on entry to PRINT critical region
  2971. Note:    also supported by PC Network v1.00 RECEIVER.COM
  2972. SeeAlso: AX=2001h
  2973. --------c-152001-----------------------------
  2974. INT 15 U - DOS 3.0+ PRINT.COM - SET CRITICAL REGION FLAG
  2975.     AX = 2001h
  2976.     ES:BX -> byte which is to be incremented while in a DOS call
  2977. Return: nothing
  2978. Desc:    specify a user flag which PRINT should set to let an interested
  2979.       application know it is in a critical region
  2980. Note:    also supported by PC Network v1.00 RECEIVER.COM
  2981. SeeAlso: AX=2000h
  2982. --------O-152010-----------------------------
  2983. INT 15 - OS HOOK - SETUP SYSREQ ROUTINE (AT,XT286,PS50+)
  2984.     AX = 2010h
  2985.     ???
  2986. Return: ???
  2987. SeeAlso: AX=2011h
  2988. --------O-152011-----------------------------
  2989. INT 15 - OS HOOK - COMPLETION OF SYSREQ FUNCTION (AT,XT286,PS50+)
  2990.     AX = 2011h
  2991.     ???
  2992. Return: ???
  2993. SeeAlso: AX=2010h
  2994. --------B-1521-------------------------------
  2995. INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
  2996.     AH = 21h
  2997.     AL = subfunction
  2998.         00h read POST log
  2999.         01h write POST log
  3000.         BH = device ID
  3001.         BL = error code
  3002. Return: CF clear if successful
  3003.     CF set on error
  3004.     AH = status
  3005.         00h OK
  3006.         01h list full
  3007.         02h unsupported subfunction
  3008.         80h invalid command
  3009.         86h unsupported function
  3010.     if function 00h:
  3011.        BX = number of error codes stored
  3012.        ES:DI -> error log
  3013. Notes:    the log is a series of words, the first byte of which identifies the
  3014.       error code and the second the device.
  3015.     supported by AMI PCI BIOS
  3016.     IBM considers this a required BIOS function
  3017.     if the device ID is FFh, the "error code" is the actual device number
  3018.       minus 255 (thus these devices have no specific error codes)
  3019. SeeAlso: AH=23h"SYSTEM",AH=24h"SYSTEM"
  3020. --------B-1522-------------------------------
  3021. INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC
  3022.     AH = 22h
  3023. Return: CF set on error
  3024.         AH = status (86h if function not supported)
  3025.     CF clear on success
  3026.         AH = 00h
  3027.         ES:BX -> ROM BASIC
  3028. Notes:    if this function is not supported, ROM BASIC is at F600h:0000h
  3029.     IBM classifies this function as optional
  3030. SeeAlso: INT 86"BASIC",INT F0"BASIC"
  3031. --------B-152300-----------------------------
  3032. INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ??? CMOS DATA
  3033.     AX = 2300h
  3034. Return: CF clear if successful
  3035.         CL = value of CMOS location 2Dh
  3036.         CH = value of CMOS location 2Eh
  3037.     CF set on error
  3038.         AH = error code (80h,86h)
  3039. Note:    IBM classifies this function as optional
  3040. SeeAlso: AX=2301h,AX=2304h,AX=2305h
  3041. --------B-152301-----------------------------
  3042. INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SET ??? CMOS DATA
  3043.     AX = 2301h
  3044.     CL = new value for CMOS location 2Dh
  3045.     CH = new value for CMOS location 2Eh
  3046. Return: CF clear if successful
  3047.     CF set on error
  3048.         AH = error code (80h,86h)
  3049. Notes:    sets the contents of CMOS locations 2Dh and 2Eh
  3050.     IBM classifies this function as optional
  3051. SeeAlso: AX=2300h,AX=2304h,AX=2305h
  3052. --------B-152302-----------------------------
  3053. INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ROM STARTUP VIDEO REG TABLES
  3054.     AX = 2302h
  3055.     BL = data index (00h-0Dh) (see #00459)
  3056. Return: ES:BX -> table for register (see #00460,#00461)
  3057.     CX = size of table in bytes (may be 0000h)
  3058. Note:    IBM classifies this function as optional
  3059. SeeAlso: AX=2300h,AX=2301h,AX=2303h
  3060.  
  3061. (Table 00459)
  3062. Values for PS/1 ROM startup video register tables:
  3063.  00h    DAC registers
  3064.  01h    ???
  3065.  02h    Palette registers
  3066.  03h-0Dh ???
  3067.  
  3068. Format of PS/1 ROM startup DAC register table:
  3069. Offset    Size    Description    (Table 00460)
  3070.  00h    WORD    number of DAC registers in table
  3071.  02h    var    array of 3-byte DAC register values, starting at register 00h
  3072. SeeAlso: #00459
  3073.  
  3074. Format of PS/1 ROM startup Palette register table:
  3075. Offset    Size    Description    (Table 00461)
  3076.  00h 16 BYTEs    colors for palette registers 00h through 0Fh
  3077.  10h    BYTE    border color
  3078. SeeAlso: #00459,#00018
  3079. --------B-152303-----------------------------
  3080. INT 15 U - IBM BIOS - SMART ENERGY SYSTEM - ???
  3081.     AX = 2303h
  3082.     BX = ??? ('x')
  3083.     DX = 'y' and 'z'
  3084.         bits 15-7 = 'y'
  3085.         bits 6-3 unused
  3086.         bits 2-0 = 'z'
  3087.     DI = ??? (0352h)
  3088. Return: ???
  3089. Notes:    performs graphics functions, writes to segment A000h and VGA I/O ports
  3090.     IBM classifies this function as optional
  3091. --------B-152304-----------------------------
  3092. INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SYSTEM SETUP
  3093.     AX = 2304h
  3094.     DX = segment of 32K buffer
  3095. Return: CF clear if successful
  3096.         AX = 0003h (left over from setting video mode 3)
  3097.         BX,CX,DX,BP,DS,ES destroyed
  3098.     CF set on error
  3099.         AH = error code (80h,86h)
  3100. Desc:    run system setup utility, and optionally save any changed settings to
  3101.       CMOS RAM
  3102. Note:    IBM classifies this function as optional
  3103. SeeAlso: AX=2301h,AX=2305h
  3104. --------B-152305-----------------------------
  3105. INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET PROCESSOR SPEED
  3106.     AX = 2305h
  3107. Return: CF clear if successful
  3108.         AL = processor speed in MHz
  3109.     CF set on error
  3110.         AL = FFh (speed unknown or >80 MHz)
  3111.         AL = error code (80h,86h = unsupported function)
  3112. Note:    IBM classifies this function as optional
  3113. SeeAlso: AX=2301h,AX=2304h,AH=BCh
  3114. --------b-152400-----------------------------
  3115. INT 15 - SYSTEM - later PS/2s - DISABLE A20 GATE
  3116.     AX = 2400h
  3117. Return: CF clear if successful
  3118.         AH = 00h
  3119.     CF set on error
  3120.         AH = status
  3121.         01h keyboard controller is in secure mode
  3122.         86h function not supported
  3123. Notes:    also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
  3124.     IBM classifies this function as optional
  3125. BUG:    AMI BIOS v1.00.03.AV0M never reports an error on failure to disable
  3126.       the A20 gate; it simply writes 0 to PORT 0092h
  3127. SeeAlso: AX=2401h,AX=2402h,AX=2403h,PORT 0092h
  3128. --------b-152401-----------------------------
  3129. INT 15 - SYSTEM - later PS/2s - ENABLE A20 GATE
  3130.     AX = 2401h
  3131. Return: CF clear if successful
  3132.         AH = 00h
  3133.     CF set on error
  3134.         AH = status
  3135.         01h keyboard controller is in secure mode
  3136.         86h function not supported
  3137. Notes:    also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
  3138.     IBM classifies this function as optional
  3139. SeeAlso: AX=2400h,AX=2402h,PORT 0092h
  3140. --------b-152402-----------------------------
  3141. INT 15 - SYSTEM - later PS/2s - GET A20 GATE STATUS
  3142.     AX = 2402h
  3143. Return: CF clear if successful
  3144.         AH = 00h
  3145.         AL = current state (00h disabled, 01h enabled)
  3146.         CX = ??? (set to 0000h-000Bh or FFFFh by AMI BIOS v1.00.03.AV0M)
  3147.         FFFFh if keyboard controller does not become ready within C000h
  3148.              read attempts
  3149.     CF set on error
  3150.         AH = status
  3151.         01h keyboard controller is in secure mode
  3152.         86h function not supported
  3153. Notes:    also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
  3154.     IBM classifies this function as optional
  3155. SeeAlso: AX=2400h,AX=2401h
  3156. --------b-152403-----------------------------
  3157. INT 15 - SYSTEM - later PS/2s - QUERY A20 GATE SUPPORT
  3158.     AX = 2403h
  3159. Return: CF clear if successful
  3160.         AH = 00h
  3161.         BX = status of A20 gate support (see #00462)
  3162.     CF set on error
  3163.         AH = status
  3164.         01h keyboard controller is in secure mode
  3165.         86h function not supported
  3166. Notes:    also supported by AMI PCI BIOS and Qualitas 386MAX v6.01+
  3167.     IBM classifies this function as optional
  3168. BUG:    at one point early in processing INT 15/AH=24h, the AMI PCI BIOS
  3169.       version 1.00.05.AX1 compares whether AL==03h instead of AL>=03h,
  3170.       thus causing a random branch on any value of AL greater than 3.
  3171. SeeAlso: AX=2402h
  3172.  
  3173. Bitfields for A20 gate support status:
  3174. Bit(s)    Description    (Table 00462)
  3175.  0    supported on keyboard controller
  3176.  1    supported with bit 1 of I/O port 92h
  3177.  14-2    reserved
  3178.  15    additional data is available (location not yet defined)
  3179. --------T-153000-----------------------------
  3180. INT 15 - Object Kernel for DOS - INSTALLATION CHECK
  3181.     AX = 3000h
  3182. Return: AX:BX = 4F42h:4A21h ('OBJ!') if installed
  3183.         CX = resident segment
  3184. Program: the Object Kernel is a program by M.W. Pieters which is currently
  3185.       under development
  3186. Note:    Central Point's CPBACKUP v9 calls INT 15/AX=3000h at startup, but it
  3187.       may be checking for a different program's presence
  3188. SeeAlso: AX=3001h,AX=3008h
  3189. --------T-153001-----------------------------
  3190. INT 15 - Object Kernel for DOS - GET STATUS BLOCK
  3191.     AX = 3001h
  3192. Return: AX = FFFFh
  3193.     ES:DI -> status block
  3194. SeeAlso: AX=3000h,AX=3008h
  3195. --------T-153002-----------------------------
  3196. INT 15 - Object Kernel for DOS - KILL PROCESS
  3197.     AX = 3002h
  3198.     (not yet implemented)
  3199. SeeAlso: AX=3000h
  3200. --------T-153003-----------------------------
  3201. INT 15 - Object Kernel for DOS - STOP PROCESS
  3202.     AX = 3003h
  3203.     (not yet implemented)
  3204. SeeAlso: AX=3000h
  3205. --------T-153004-----------------------------
  3206. INT 15 - Object Kernel for DOS - START PROCESS
  3207.     AX = 3004h
  3208.     (not yet implemented)
  3209. SeeAlso: AX=3000h
  3210. --------T-153005-----------------------------
  3211. INT 15 - Object Kernel for DOS - RESTART PROCESS
  3212.     AX = 3005h
  3213.     (not yet implemented)
  3214. SeeAlso: AX=3000h
  3215. --------T-153006-----------------------------
  3216. INT 15 - Object Kernel for DOS - EXECUTE PROCESS
  3217.     AX = 3006h
  3218.     (not yet implemented)
  3219. SeeAlso: AX=3000h
  3220. --------T-153007-----------------------------
  3221. INT 15 - Object Kernel for DOS - LIST PROCESSES
  3222.     AX = 3007h
  3223.     (not yet implemented)
  3224. SeeAlso: AX=3000h
  3225. --------T-153008-----------------------------
  3226. INT 15 - Object Kernel for DOS - SWITCH ObjectKernel ON/OFF
  3227.     AX = 3008h
  3228.     BH = new state (00h disabled, 01h enabled)
  3229. Return: AX = FFFFh
  3230. SeeAlso: AX=3000h,AX=3009h
  3231. --------T-153009-----------------------------
  3232. INT 15 - Object Kernel for DOS - RESERVED FOR FUTURE USE
  3233.     AX = 3009h to 30FFh
  3234. SeeAlso: AX=3000h
  3235. Program: the Object Kernel is a program by M.W. Pieters which is currently
  3236.       under development
  3237. ----------153D-------------------------------
  3238. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  3239.     AH = 3Dh
  3240. SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
  3241. ----------153E-------------------------------
  3242. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  3243.     AH = 3Eh
  3244. SeeAlso: AH=3Dh"IBM",AH=3Fh"IBM"
  3245. ----------153F-------------------------------
  3246. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  3247.     AH = 3Fh
  3248. SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
  3249. --------B-1540-------------------------------
  3250. INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
  3251.     AH = 40h
  3252.     AL = subfunction
  3253.         00h get system profile in CX and BX
  3254.         01h set system profile from CX and BX
  3255.         02h get internal modem profile in BX
  3256.         03h set internal modem profile from BX
  3257. Return: CF clear if successful
  3258.         AH = 00h
  3259.     CF set on error
  3260.         AH = status (80h = profile execution failed)
  3261. --------V-154000-----------------------------
  3262. INT 15 - Compaq SLT/286 or Portable 386 - READ LCD/PLASMA TIMEOUT
  3263.     AX = 4000h
  3264. Return: AX = 4000h
  3265.     CL = timeout in minutes, 00h if disabled
  3266. SeeAlso: AX=4001h,AX=4600h
  3267. --------V-154001-----------------------------
  3268. INT 15 - Compaq SLT/286 or Portable 386 - SET LCD/PLASMA TIMEOUT
  3269.     AX = 4001h
  3270.     CL = timeout in minutes, 00h to disable
  3271. Return: AL = status
  3272.         00h timeout modified
  3273.         01h timeout cannot be modified
  3274.         40h timeout cannot be modified
  3275.     CL = timeout in minutes, 00h if disabled
  3276. SeeAlso: AX=4000h,AX=4601h
  3277. --------B-1541-------------------------------
  3278. INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others)
  3279.     AH = 41h
  3280.     AL = condition type (see #00463)
  3281.     BH = condition compare or mask value
  3282.     BL = timeout value times 55 milliseconds
  3283.         00h means no timeout
  3284.     DX = I/O port address if AL bit 4 set
  3285.     ES:DI -> user byte if AL bit 4 clear
  3286. Return: after event or timeout occurs
  3287. Note:    call AH=C0h and examine bit 3 of feature byte 1 to determine whether
  3288.       this function is supported
  3289. SeeAlso: AH=83h,AH=86h,AH=C0h
  3290.  
  3291. Bitfields for external event wait condition type:
  3292. Bit(s)    Description    (Table 00463)
  3293.  0-2    condition to wait for
  3294.     0 any external event
  3295.     1 compare and return if equal
  3296.     2 compare and return if not equal
  3297.     3 test and return if not zero
  3298.     4 test and return if zero
  3299.  3    reserved
  3300.  4    1=port address, 0=user byte
  3301.  5-7    reserved
  3302. --------B-1542-------------------------------
  3303. INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
  3304.     AH = 42h
  3305.     AL = suspend type
  3306.         00h to use system profile
  3307.         01h to force suspend regardless of system profile
  3308. Return: nothing
  3309. Note:    the HP 95LX apparently suspends regardless of the value in AL; on
  3310.       power-up, execution will resume following the instruction calling
  3311.       this function
  3312. SeeAlso: AH=44h
  3313. --------b-154280-----------------------------
  3314. INT 15 - Compaq SLT/286 - ENTER STANDBY
  3315.     AX = 4280h
  3316. Return: AH = 42h
  3317.     CF clear if successful
  3318.     CF set if unable to enter standby
  3319. SeeAlso: AX=4600h,AX=5307h/CX=0001h"STAND-BY"
  3320. --------B-1543-------------------------------
  3321. INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
  3322.     AH = 43h
  3323. Return: AL = status bits (see #00464)
  3324.  
  3325. Bitfields for Convertible system status:
  3326. Bit(s)    Description    (Table 00464)
  3327.  7    power low
  3328.  6    external power in use
  3329.  5    standby power lost
  3330.  4    power activated by alarm
  3331.  3    internal modem powered on
  3332.  2    RS232/parallel adapter powered on
  3333.  1    reserved
  3334.  0    LCD detached
  3335. --------B-1544-------------------------------
  3336. INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
  3337.     AH = 44h
  3338.     AL = new modem power state (00h power off, 01h power on)
  3339. Return: nothing
  3340. SeeAlso: AH=42h
  3341. --------b-1544C0-----------------------------
  3342. INT 15 - Olivetti Quaderno - INITIALIZE DIGITAL SIGNAL PROCESSING???
  3343.     AX = 44C0h
  3344.     ES:DI -> new DSP procedure (exchanged with CMOS[28h])
  3345.     ES:SI -> ??? buffer
  3346. Return: ES:DI -> old DSP procedure
  3347.     ES:SI buffer filled with ten bytes from CMOS (addresses 14h-1Ch)
  3348.       followed by 00h (addresses 15h-1Ch copied only if less than 21h)
  3349. Note:    this function is also supported by XBIOS.COM
  3350. SeeAlso: AX=44C9h
  3351. --------b-1544C1-----------------------------
  3352. INT 15 - Olivetti Quaderno - ???
  3353.     AX = 44C1h
  3354.     ???
  3355. Return: ???
  3356. Note:    this function is also supported by XBIOS.COM
  3357. SeeAlso: AX=44C9h
  3358. --------b-1544C2-----------------------------
  3359. INT 15 - Olivetti Quaderno - ???
  3360.     AX = 44C2h
  3361.     DL = byte to be written to I/O port 350h
  3362. Note:    this function is also supported by XBIOS.COM
  3363. SeeAlso: AX=44C3h,AX=44C9h
  3364. --------b-1544C3-----------------------------
  3365. INT 15 - Olivetti Quaderno - GET ???
  3366.     AX = 44C3h
  3367. Return: DH = bitfields (see #00465)
  3368.     DL = value read from I/O port 350h
  3369. Note:    this function is also supported by XBIOS.COM
  3370. SeeAlso: AX=44C2h,AX=44C9h
  3371.  
  3372. Bitfields for Olivetti Quaderno ???:
  3373. Bit(s)    Description    (Table 00465)
  3374.  5-7    5-7 read from I/O port 351h
  3375.  2-4    zero
  3376.  1-0    "tres complique"
  3377. --------b-1544C4-----------------------------
  3378. INT 15 - Olivetti Quaderno - ???
  3379.     AX = 44C4h and 44C5h
  3380.     ???
  3381. Return: ???
  3382. Note:    this function is also supported by XBIOS.COM
  3383. SeeAlso: AX=44C9h
  3384. --------b-1544C6-----------------------------
  3385. INT 15 - Olivetti Quaderno - READ LCD
  3386.     AX = 44C6h
  3387. Return: DX = FFFFh clock is displayed on LCD display
  3388.     DX = other: hex number displayed in first four positions of display
  3389.     BH = left alphanumeric character on display (see #00466)
  3390.     BL = right alphanumeric character on display (see #00466)
  3391.     CL = colon flags (see #00467)
  3392. Notes:    the LCD display has the format HH:HH:AA, where H is a hex digit and A
  3393.       is an alphanumeric character
  3394.     this function is also supported by XBIOS.COM
  3395. SeeAlso: AX=44C7h,AX=44C9h
  3396.  
  3397. (Table 00466)
  3398. Values for Olivetti Quaderno LCD alphanumeric characters:
  3399.  00h-0Fh hex digit
  3400.  2Bh    "+"
  3401.  2Dh    "-"
  3402.  30h-39h "0" to "9"
  3403.  41h-5Ah "A" to "Z"
  3404.  61h-6Ah "a" to "z"
  3405.  else    blank
  3406.  
  3407. Bitfields for Olivetti Quaderno LCD colon flags:
  3408. Bit(s)    Description    (Table 00467)
  3409.  0    left colon on
  3410.  1    right colon on
  3411.  2-7    unused
  3412. --------b-1544C7-----------------------------
  3413. INT 15 - Olivetti Quaderno - WRITE LCD
  3414.     AX = 44C7h
  3415.     DX = hex display
  3416.         FFFFh display clock and "HI", "Md", or "Lo"
  3417.         BH,BL,CL unused
  3418.         other: display specified hex number in first four positions
  3419.         BH = left alphanumeric character on display (see #00466)
  3420.         BL = right alphanumeric character on display (see #00466)
  3421.         CL = colon flags (see #00467)
  3422. Return: nothing
  3423. Note:    this function is also supported by XBIOS.COM
  3424. SeeAlso: AX=44C6h
  3425. --------b-1544C8-----------------------------
  3426. INT 15 - Olivetti Quaderno - ???
  3427.     AX = 44C8h
  3428.     CL = ??? (00h,02h,21h)
  3429.     CH = ???
  3430.     ???
  3431. Return: ???
  3432. Note:    this function is also supported by XBIOS.COM
  3433. SeeAlso: AX=44C9h
  3434. --------b-1544C9-----------------------------
  3435. INT 15 - Olivetti Quaderno - GET XBIOS VERSION
  3436.     AX = 44C9h
  3437. Return: AL = major version
  3438.     AH = minor version
  3439. Note:    this function is also supported by XBIOS.COM
  3440. --------B-1544F1-----------------------------
  3441. INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
  3442.     AX = 44F1h
  3443.     DS:DX -> byte with 00h ???
  3444. Return: ???
  3445. Note:    used by Toshiba BIOS setup utility TSETUP.EXE to distinguish
  3446.       between USER and SUPERVISOR security level
  3447. SeeAlso: AX=44F2h,AX=44F3h
  3448. --------B-1544F2BX0604-----------------------
  3449. INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
  3450.     AX = 44F2h
  3451.     BX = 0604h ???
  3452. Return: CF = ???
  3453.     AH = ???
  3454.     DX = ???
  3455. Note:    used by Toshiba BIOS setup utility TSETUP.EXE to distinguish
  3456.       between USER and SUPERVISOR security level
  3457. SeeAlso: AX=44F1h,AX=44F3h
  3458. --------B-1544F3-----------------------------
  3459. INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
  3460.     AX = 44F3h
  3461.     DS:DX -> byte with 00h or 01h ???
  3462. Return: DS:DX -> changed ???
  3463. Note:    used by Toshiba BIOS setup utility TSETUP.EXE to distinguish
  3464.       between USER and SUPERVISOR security level
  3465. SeeAlso: AX=44F1h,AX=44F2h
  3466. --------b-1545-------------------------------
  3467. INT 15 U - HP 100LX/200LX - SET DISPLAY CONTROL STATUS
  3468.     AH = 45h
  3469.     AL = new display control status
  3470.         bit 0: DISPCTL flag +C instead of -C
  3471.         bit 1: DISPCTL flag +K instead of -K
  3472. SeeAlso: AH=46h"HP",AH=47h"HP"
  3473. --------b-1546-------------------------------
  3474. INT 15 U - HP 100LX/200LX - SET POWER OFF TIMEOUT
  3475.     AH = 46h
  3476.     BX = timeout value in ticks
  3477.         0000h inhibit auto power off
  3478. Note:    the 200LX default timeout is 0CCDh = 3277 ticks = approx. 3 min.
  3479. SeeAlso: AH=45h"HP",AH=47h"HP"
  3480. --------b-154600-----------------------------
  3481. INT 15 - Compaq SLT/286 - READ POWER CONSERVATION/MODEM CONFIGURATION
  3482.     AX = 4600h
  3483. Return: AH = modem configuration information (see #00468)
  3484.     AL = power conservation status information (see #00469)
  3485.     BH = default system inactivity timeout (1-21 minutes)
  3486.     BL = current system inactivity timeout (1-21 minutes)
  3487.     CH = default video display inactivity timeout (1-63 minutes)
  3488.     CL = current video display inactivity timeout (1-63 minutes)
  3489.     DH = default fixed disk drive inactivity timeout (1-21 minutes)
  3490.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3491. SeeAlso: AX=4280h,AX=4601h,INT 77
  3492.  
  3493. Bitfields for Compaq SLT/286 modem configuration information:
  3494. Bit(s)    Description    (Table 00468)
  3495.  0    powerup state (0 off, 1 on)
  3496.  1    modem installed
  3497.  2    IRQ line assignment (0 IRQ 4, 1 IRQ 3)
  3498.  3    COM port assignment (0 = COM 2, 1 = COM 1)
  3499.  4    modem state (0 not assigned, 1 assigned)
  3500.  5    modem is on
  3501.  
  3502. Bitfields for Compaq SLT/286 power conservation status:
  3503. Bit(s)    Description    (Table 00469)
  3504.  0    power source (0 internal, 1 external)
  3505.  1-2    low battery state
  3506.     00 no low battery condition
  3507.     01 low battery 1
  3508.     10 reserved
  3509.     11 low battery 2
  3510.  3-4    power conservation mode
  3511.     00 automatic, 01 on, 10 off, 11 reserved
  3512. --------b-154601-----------------------------
  3513. INT 15 - Compaq SLT/286 - MODIFY POWER CONSERVATION/MODEM CONFIGURATION
  3514.     AX = 4601h
  3515.     BL = system inactivity timeout (1-21 minutes)
  3516.         FFh do not change
  3517.     CL = video display inactivity timeout (1-63 minutes)
  3518.         FFh do not change
  3519.     DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3520.         FFh do not change
  3521.     DH = new modem state (00h turn off, 01h turn on, FFh don't change)
  3522. Return: CF clear if successful
  3523.         AH = 00h
  3524.         BL = current system inactivity timeout (1-21 minutes)
  3525.         CL = current video display inactivity timeout (1-63 minutes)
  3526.         DL = current fixed disk drive inactivity timeout (1-21 minutes)
  3527.         DH = modem state (FFh unchanged, 00h turned off, 01h turned on)
  3528.     CF set on error
  3529.         AH = error code
  3530.         01h input is out of range
  3531.         02h no modem present
  3532. SeeAlso: AX=4600h,INT 77
  3533. --------b-154604-----------------------------
  3534. INT 15 - Compaq Contura 486 and "Alladin" 08/05/93 ROMs - GET ???
  3535.     AX = 4604h
  3536. Return: CF clear if successful
  3537.         AL = byte read from I/O port 03F8h
  3538.     CF set on error (not supported)
  3539.         AH = 86h (unsupported function)
  3540. Note:    also supported by 7/26/93 LTE Lite 386 ROM
  3541. --------b-154605-----------------------------
  3542. INT 15 - Compaq Contura 486 and "Alladin" 08/05/93 ROMs - ???
  3543.     AX = 4605h
  3544. Return: CF clear if successful
  3545.     CF set on error (not supported)
  3546.         AH = 86h (unsupported function)
  3547. Note:    this function is a NOP (other than clearing CF) in the 08/05/93 version
  3548.       of the Contura 486/486c/486cx and "Aladdin" ROM, and the 7/26/93
  3549.       LTE Lite 386 ROM
  3550. --------b-1547-------------------------------
  3551. INT 15 U - HP 100LX/200LX - GET/SET DISPLAY CONTRAST
  3552.     AH = 47h
  3553.     AL = subfunction
  3554.        00h set contrast
  3555.         BL = new contrast
  3556.             (00h-0Fh, 0Fh is darkest, 10h-FFh are same as 0Fh)
  3557.        other get current contrast
  3558. Return: AL = contrast (00h-0Fh, 0Fh is darkest)
  3559. Note:    may be for backward compatibility with HP95LX, as INT 15/AH=62h does
  3560.       substantially the same thing as this function
  3561. SeeAlso: AH=45h"HP",AH=48h"HP",AH=62h"HP"
  3562. --------b-1548-------------------------------
  3563. INT 15 U - HP 100LX/200LX - SET BUZZER VOLUME
  3564.     AH = 48h
  3565.     AL = volume (00h-03h; 03h is loudest, 04h-FFh are same as 03h)
  3566. SeeAlso: AH=47h"HP"
  3567. --------S-1549-------------------------------
  3568. INT 15 U - HP 100LX/200LX - SERIAL INTERFACE SELECT
  3569.     AH = 49h
  3570.     AL = serial interface
  3571.         00h wired (COM1)
  3572.         01h infrared
  3573. Note:    interface should only be changed in deactivated state (see AH=4Ah)
  3574. SeeAlso: AH=4Ah"HP"
  3575. --------J-154900-----------------------------
  3576. INT 15 - Far East MS-DOS - GET BIOS TYPE
  3577.     AX = 4900h
  3578. Return: CF clear if successful
  3579.         AH = 00h
  3580.         BL = BIOS mode
  3581.         00h DOS/V
  3582.         01h standard DBCS DOS (hardware DBCS support)
  3583.     CF set on error
  3584.         AH = 86h (function not supported)
  3585. Note:    in practice, DOS/J returns AH=86h; AX DOS does not support this call
  3586. SeeAlso: AH=50h,INT 21/AH=30h
  3587. --------S-154A-------------------------------
  3588. INT 15 U - HP 100LX/200LX - SERIAL INTERFACE CONTROL
  3589.     AH = 4Ah
  3590.     AL = control
  3591.         00h deactivate
  3592.         01h activate
  3593. Note:    interface selected with AH=49h will be (de)activated
  3594. SeeAlso: AH=49h"HP",AH=4Bh"HP"
  3595. --------b-154B-------------------------------
  3596. INT 15 U - HP 100LX/200LX - ADJUST SYSTEM TIME
  3597.     AH = 4Bh
  3598. Desc:    adjust system time based on real-time clock
  3599. SeeAlso: AH=4Ah"HP",INT 1A/AH=02h,INT 21/AH=2Ch
  3600. --------b-154DD4-----------------------------
  3601. INT 15 - HP 95LX/100LX/200LX - INSTALLATION CHECK
  3602.     AX = 4DD4h
  3603. Return: BX = 4850h ("HP") if HP 95LX/100LX/200LX
  3604.         CX = model
  3605.         0101h HP 95LX
  3606.         0102h HP 100LX/200LX
  3607.         DH = ???
  3608.         02h HP 200LX 2MB BIOS 1.01 A D german
  3609.         DL = ???
  3610.         00h HP 95LX
  3611.         01h HP 200LX 2MB BIOS 1.01 A D german
  3612. SeeAlso: INT 0B"HP 95LX",INT 0F"HP 95LX",INT 5F/AH=00h,INT 60/DI=0100h
  3613. SeeAlso: INT 61"HP 95LX"
  3614. --------b-154E-------------------------------
  3615. INT 15 - HP 95LX - ENABLE/DISABLE LIGHT SLEEP
  3616.     AH = 4Eh
  3617.     AL = light sleep
  3618.         00h disabled
  3619.         01h enabled
  3620. Note:    when light sleep is disabled, the system will continue running at full
  3621.       speed; when enabled, it may automatically slow to conserve batteries
  3622. SeeAlso: INT 06"HP 95LX",INT 60/DI=0100h
  3623. ----------154E-------------------------------
  3624. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  3625.     AH = 4Eh
  3626. SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
  3627. --------B-154F-------------------------------
  3628. INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
  3629.     AH = 4Fh
  3630.     AL = hardware scan code (see #00006)
  3631.     CF set
  3632. Return: CF set to continue processing scan code
  3633.        AL = possibly-altered hardware scan code (see #00006)
  3634.     CF clear
  3635.        scan code should be ignored
  3636. Notes:    called by INT 09 handler to translate scan codes; the INT 09 code does
  3637.       not examine the scan code it reads from the keyboard until after
  3638.       this function returns.  This permits software to rearrange the
  3639.       keyboard; for example, swapping the CapsLock and Control keys, or
  3640.       turning the right Shift key into Enter.
  3641.     DOS 6 KEYB.COM will not pass through this function if Ctrl-Alt-Del is
  3642.       pressed and a SmartDrive v4-compatible cache is installed which has
  3643.       dirty cache buffers; some other disk caches such as HyperDisk
  3644.       operate similarly in order to prevent loss of cached data which has
  3645.       not yet been written to disk
  3646.     IBM classifies this function as required
  3647. SeeAlso: INT 09,INT 15/AH=C0h
  3648. --------J-1550-------------------------------
  3649. INT 15 - DOS/V - FONT SUBSYSTEM ACCESS
  3650.     AH = 50h
  3651.     AL = which function address to retrieve
  3652.         00h "read font" function
  3653.         01h "write font" function
  3654.     BL = 00h
  3655.     BH = character size (00h single-byte, 01h double-byte)
  3656.     DH = width of character cell
  3657.     DL = height of character cell
  3658.     BP = code page (see #00470)
  3659. Return: CF clear if successful
  3660.         AH = 00h
  3661.         ES:BX -> requested function's address
  3662.     CF set on error
  3663.         AH = error code (see #00471)
  3664. SeeAlso: AH=49h
  3665.  
  3666. (Table 00470)
  3667. Values for DOS/V code page:
  3668.  0    default
  3669.  437    US English
  3670.  932    Japanese
  3671.  934    Korea
  3672.  936    China
  3673.  938    Taiwan
  3674. SeeAlso: #01757
  3675.  
  3676. (Table 00471)
  3677. Values for DOS/V error code:
  3678.  01h    invalid font type in BH
  3679.  02h    BL not zero
  3680.  03h    invalid font size
  3681.  04h    invalid code page
  3682.  80h    unsupported function (PC)
  3683.  86h    unsupported function (XT)
  3684. SeeAlso: #01680
  3685. --------T-1550-------------------------------
  3686. INT 15 - VMIX v2.???+ - "sys_vm_page" - SET NEW VIRTUAL PAGE TABLE
  3687.     AH = 50h
  3688.     BX = segment of page directory table
  3689.     CX = page number of page table
  3690. SeeAlso: AH=10h"VMiX",AH=51h"VMiX",AH=52h"VMiX"
  3691. --------T-1551-------------------------------
  3692. INT 15 - VMiX v2.???+ - "sys_vm_func" - EXECUTE FUNCTION IN PROTECTED MODE
  3693.     AH = 51h
  3694.     STACK:    DWORD    selector:offset of function
  3695. Return: registers as returned by function
  3696. Note:    executes function with privilege level 0 (highest privilege)
  3697. SeeAlso: AH=10h"VMiX",AH=52h"VMiX"
  3698. --------B-155101-----------------------------
  3699. INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER
  3700.     AX = 5101h
  3701. Return: CF set if successful
  3702.         AH = 00h
  3703.         AL = current configuration number
  3704.         00h system unit only
  3705.         FFh configuration not recognized
  3706.         BX = status flag
  3707.         bits 0-14: reserved
  3708.         bit 15: additional data is available (location TBD)
  3709.     CF clear on error
  3710.         AH = status
  3711.         01h expansion unit is not present
  3712.         86h function not supported
  3713. Note:    CF convention is the reverse of the standard convention for this
  3714.       interrupt.  (Perhaps a typo in the IBM BIOS Tech Ref?)
  3715. --------T-1552-------------------------------
  3716. INT 15 - VMiX v2.???+ - "sys_vm_init" - INITIALIZE PROTECTED-MODE ENVIRONMENT
  3717.     AH = 52h
  3718. SeeAlso: AH=50h"VMiX",AH=51h"VMiX"
  3719. --------d-1552-------------------------------
  3720. INT 15 C - IBM/MS INT 13 Extensions - MEDIA EJECT INTERCEPT
  3721.     AH = 52h
  3722.     DL = drive number
  3723. Return: CF clear if OK to eject media
  3724.         AH = 00h
  3725.     CF set if ejection disallowed
  3726.         AH = error code (B1h,B3h) (see #00234)
  3727. Note:    called by the IBM/MS INT 13 Extensions driver/BIOS when an ejection
  3728.       request is made
  3729. SeeAlso: INT 13/AH=46h"INT 13 Extensions"
  3730. --------p-155300-----------------------------
  3731. INT 15 - Advanced Power Management v1.0+ - INSTALLATION CHECK
  3732.     AX = 5300h
  3733.     BX = device ID of system BIOS (0000h)
  3734. Return: CF clear if successful
  3735.         AH = major version (BCD)
  3736.         AL = minor version (BCD)
  3737.         BX = 504Dh ("PM")
  3738.         CX = flags (see #00472)
  3739.     CF set on error
  3740.         AH = error code (06h,09h,86h) (see #00473)
  3741. BUG:    early versions of the Award Modular BIOS with built-in APM support
  3742.       reportedly do not set BX on return
  3743.  
  3744. Bitfields for APM flags:
  3745. Bit(s)    Description    (Table 00472)
  3746.  0    16-bit protected mode interface supported
  3747.  1    32-bit protected mode interface supported
  3748.  2    CPU idle call reduces processor speed
  3749.  3    BIOS power management disabled
  3750.  4    BIOS power management disengaged (APM v1.1)
  3751.  5-7    reserved
  3752.  
  3753. (Table 00473)
  3754. Values for APM error code:
  3755.  01h    power management functionality disabled
  3756.  02h    interface connection already in effect
  3757.  03h    interface not connected
  3758.  04h    real-mode interface not connected
  3759.  05h    16-bit protected-mode interface already connected
  3760.  06h    16-bit protected-mode interface not supported
  3761.  07h    32-bit protected-mode interface already connected
  3762.  08h    32-bit protected-mode interface not supported
  3763.  09h    unrecognized device ID
  3764.  0Ah    invalid parameter value in CX
  3765.  0Bh    (APM v1.1) interface not engaged
  3766.  0Ch    (APM v1.2) function not supported
  3767.  0Dh    (APM v1.2) Resume Timer disabled
  3768.  0Eh-1Fh reserved for other interface and general errors
  3769.  20h-3Fh reserved for CPU errors
  3770.  40h-5Fh reserved for device errors
  3771.  60h    can't enter requested state
  3772.  61h-7Fh reserved for other system errors
  3773.  80h    no power management events pending
  3774.  81h-85h reserved for other power management event errors
  3775.  86h    APM not present
  3776.  87h-9Fh reserved for other power management event errors
  3777.  A0h-FEh reserved
  3778.  FFh    undefined
  3779. --------p-155301-----------------------------
  3780. INT 15 - Advanced Power Management v1.0+ - CONNECT REAL-MODE INTERFACE
  3781.     AX = 5301h
  3782.     BX = device ID of system BIOS (0000h)
  3783. Return: CF clear if successful
  3784.     CF set on error
  3785.         AH = error code (02h,05h,07h,09h) (see #00473)
  3786. Note:    on connection, an APM v1.1 or v1.2 BIOS switches to APM v1.0
  3787.       compatibility mode until it is informed that the user supports a
  3788.       newer version of APM (see AX=530Eh)
  3789. SeeAlso: AX=5302h,AX=5303h,AX=5304h
  3790. --------p-155302-----------------------------
  3791. INT 15 R - Advanced Power Management v1.0+ - CONNECT 16-BIT PROTMODE INTERFACE
  3792.     AX = 5302h
  3793.     BX = device ID of system BIOS (0000h)
  3794. Return: CF clear if successful
  3795.         AX = real-mode segment base address of protected-mode 16-bit code
  3796.         segment
  3797.         BX = offset of entry point
  3798.         CX = real-mode segment base address of protected-mode 16-bit data
  3799.         segment
  3800.         ---APM v1.1---
  3801.         SI = APM BIOS code segment length
  3802.         DI = APM BIOS data segment length
  3803.     CF set on error
  3804.         AH = error code (02h,05h,06h,07h,09h) (see #00473)
  3805. Notes:    the caller must initialize two consecutive descriptors with the
  3806.       returned segment base addresses; these descriptors must be valid
  3807.       whenever the protected-mode interface is called, and will have
  3808.       their limits arbitrarily set to 64K.
  3809.     the protected mode interface is invoked by making a far call with the
  3810.       same register values as for INT 15; it must be invoked while CPL=0,
  3811.       the code segment descriptor must have a DPL of 0, the stack must be
  3812.       in a 16-bit segment and have enough room for BIOS use and possible
  3813.       interrupts, and the current I/O permission bit map must allow access
  3814.       to the I/O ports used for power management.
  3815.     functions 00h-03h are not available from protected mode
  3816.     on connection, an APM v1.1 or v1.2 BIOS switches to APM v1.0
  3817.       compatibility mode until it is informed that the user supports a
  3818.       newer version of APM (see AX=530Eh)
  3819. SeeAlso: AX=5301h,AX=5303h,AX=5304h
  3820. --------p-155303-----------------------------
  3821. INT 15 - Advanced Power Management v1.0+ - CONNECT 32-BIT PROTMODE INTERFACE
  3822.     AX = 5303h
  3823.     BX = device ID of system BIOS (0000h)
  3824. Return: CF clear if successful
  3825.         AX = real-mode segment base address of protected-mode 32-bit code
  3826.         segment
  3827.         EBX = offset of entry point
  3828.         CX = real-mode segment base address of protected-mode 16-bit code
  3829.         segment
  3830.         DX = real-mode segment base address of protected-mode 16-bit data
  3831.         segment
  3832.         ---APM v1.1---
  3833.         SI = APM BIOS code segment length
  3834.         DI = APM BIOS data segment length
  3835.     CF set on error
  3836.         AH = error code (02h,05h,07h,08h,09h) (see #00473)
  3837. Notes:    the caller must initialize three consecutive descriptors with the
  3838.       returned segment base addresses for 32-bit code, 16-bit code, and
  3839.       16-bit data, respectively; these descriptors must be valid whenever
  3840.       the protected-mode interface is called, and will have their limits
  3841.       arbitrarily set to 64K.
  3842.     the protected mode interface is invoked by making a far call to the
  3843.       32-bit code segment with the same register values as for INT 15; it
  3844.       must be invoked while CPL=0, the code segment descriptor must have a
  3845.       DPL of 0, the stack must be in a 32-bit segment and have enough room
  3846.       for BIOS use and possible interrupts, and the current I/O permission
  3847.       bit map must allow access to the I/O ports used for power management.
  3848.     functions 00h-03h are not available from protected mode
  3849.     on connection, an APM v1.1 or v1.2 BIOS switches to APM v1.0
  3850.       compatibility mode until it is informed that the user supports a
  3851.       newer version of APM (see AX=530Eh)
  3852. SeeAlso: AX=5301h,AX=5302h,AX=5304h
  3853. --------p-155304-----------------------------
  3854. INT 15 - Advanced Power Management v1.0+ - DISCONNECT INTERFACE
  3855.     AX = 5304h
  3856.     BX = device ID of system BIOS (0000h)
  3857. Return: CF clear if successful
  3858.     CF set on error
  3859.         AH = error code (03h,09h) (see #00473)
  3860. SeeAlso: AX=5301h,AX=5302h,AX=5303h
  3861. --------p-155305-----------------------------
  3862. INT 15 - Advanced Power Management v1.0+ - CPU IDLE
  3863.     AX = 5305h
  3864. Return: CF clear if successful (after system leaves idle state)
  3865.     CF set on error
  3866.         AH = error code (03h,0Bh) (see #00473)
  3867. Notes:    call when the system is idle and should be suspended until the next
  3868.       system event or interrupt
  3869.     should not be called from within a hardware interrupt handler to avoid
  3870.       reentrance problems
  3871.     if an interrupt causes the system to resume normal processing, the
  3872.       interrupt may or may not have been handled when the BIOS returns
  3873.       from this call; thus, the caller should allow interrupts on return
  3874.     interrupt handlers may not retain control if the BIOS allows
  3875.       interrupts while in idle mode even if they are able to determine
  3876.       that they were called from idle mode
  3877.     the caller should issue this call continuously in a loop until it needs
  3878.       to perform some processing of its own
  3879. SeeAlso: AX=1000h,AX=5306h,INT 2F/AX=1680h
  3880. --------p-155306-----------------------------
  3881. INT 15 - Advanced Power Management v1.0+ - CPU BUSY
  3882.     AX = 5306h
  3883. Return: CF clear if successful
  3884.     CF set on error
  3885.         AH = error code (03h,0Bh) (see #00473)
  3886. Notes:    called to ensure that the system runs at full speed even on systems
  3887.       where the BIOS is unable to recognize increased activity (especially
  3888.       if interrupts are hooked by other programs and not chained to the
  3889.       BIOS)
  3890.     this call may be made even when the system is already running at full
  3891.       speed, but it will create unnecessary overhead
  3892.     should not be called from within a hardware interrupt handler to avoid
  3893.       reentrance problems
  3894. SeeAlso: AX=5305h
  3895. --------p-155307-----------------------------
  3896. INT 15 - Advanced Power Management v1.0+ - SET POWER STATE
  3897.     AX = 5307h
  3898.     BX = device ID (see #00474)
  3899.     CX = system state ID (see #00475)
  3900. Return: CF clear if successful
  3901.     CF set on error
  3902.         AH = error code (01h,03h,09h,0Ah,0Bh,60h) (see #00473)
  3903. Note:    should not be called from within a hardware interrupt handler to avoid
  3904.       reentrance problems
  3905. SeeAlso: AX=530Ch
  3906.  
  3907. (Table 00474)
  3908. Values for APM device IDs:
  3909.  0000h    system BIOS
  3910.  0001h    all devices for which the system BIOS manages power
  3911.  01xxh    display (01FFh for all attached display devices)
  3912.  02xxh    secondary storage (02FFh for all attached secondary storage devices)
  3913.  03xxh    parallel ports (03FFh for all attached parallel ports)
  3914.  04xxh    serial ports (04FFh for all attached serial ports)
  3915. ---APM v1.1+ ---
  3916.  05xxh    network adapters (05FFh for all attached network adapters)
  3917.  06xxh    PCMCIA sockets (06FFh for all)
  3918.  0700h-7FFFh reserved
  3919.  80xxh    system battery devices (APM v1.2)
  3920.  8100h-DFFFh reserved
  3921.  Exxxh    OEM-defined power device IDs
  3922.  F000h-FFFFh reserved
  3923.  
  3924. (Table 00475)
  3925. Values for system state ID:
  3926.  0000h    ready (not supported for device ID 0001h)
  3927.  0001h    stand-by
  3928.  0002h    suspend
  3929.  0003h    off (not supported for device ID 0001h in APM v1.0)
  3930. ---APM v1.1---
  3931.  0004h    last request processing notification (only for device ID 0001h)
  3932.  0005h    last request rejected (only for device ID 0001h)
  3933.  0006h-001Fh reserved system states
  3934.  0020h-003Fh OEM-defined system states
  3935.  0040h-007Fh OEM-defined device states
  3936.  0080h-FFFFh reserved device states
  3937. --------p-155307CX0001-----------------------
  3938. INT 15 - Advanced Power Management v1.0+ - SYSTEM STAND-BY
  3939.     AX = 5307h
  3940.     CX = 0001h
  3941.     BX = 0001h (device ID for all power-managed devices)
  3942. Return: CF clear
  3943. Notes:    puts the entire system into stand-by mode; normally called in response
  3944.       to a System Stand-by Request notification after any necessary
  3945.       processing, but may also be invoked at the caller's discretion
  3946.     should not be called from within a hardware interrupt handler to avoid
  3947.       reentrance problems
  3948.     the stand-by state is typically exited on an interrupt
  3949. SeeAlso: AX=4280h,AX=5307h/CX=0002h"SUSPEND",AX=5307h/CX=0003h,AX=530Bh
  3950. --------p-155307CX0002-----------------------
  3951. INT 15 - Advanced Power Management v1.0+ - SUSPEND SYSTEM
  3952.     AX = 5307h
  3953.     CX = 0002h
  3954.     BX = 0001h (device ID for all power-managed devices)
  3955. Return: after system is resumed
  3956.     CF clear
  3957. Notes:    puts the entire system into a low-power suspended state; normally
  3958.       called in response to a Suspend System Request notification after
  3959.       any necessary processing, but may also be invoked at the caller's
  3960.       discretion
  3961.     should not be called from within a hardware interrupt handler to avoid
  3962.       reentrance problems
  3963.     the caller may need to update its date and time values because the
  3964.       system could have been suspended for a long period of time
  3965. SeeAlso: AX=5307h/CX=0001h"STAND-BY",AX=530Bh
  3966. --------p-155307CX0003-----------------------
  3967. INT 15 - Advanced Power Management v1.2 - TURN OFF SYSTEM
  3968.     AX = 5307h
  3969.     CX = 0003h
  3970.     BX = 0001h (device ID for all power-managed devices)
  3971. Return: after system is resumed
  3972.     CF clear
  3973. Notes:    if supported by the system's power supply, turns off the system power
  3974. SeeAlso: AX=5307h/CX=0001h"STAND-BY",AX=530Bh
  3975. --------p-155308-----------------------------
  3976. INT 15 - Advanced Power Management v1.0+ - ENABLE/DISABLE POWER MANAGEMENT
  3977.     AX = 5308h
  3978.     BX = device ID for all devices power-managed by APM
  3979.         0001h (APM v1.1+)
  3980.         FFFFh (APM v1.0)
  3981.     CX = new state
  3982.         0000h disabled
  3983.         0001h enabled
  3984. Return: CF clear if successful
  3985.     CF set on error
  3986.         AH = error code (01h,03h,09h,0Ah,0Bh) (see #00473)
  3987. Notes:    when power management is disabled, the system BIOS will not
  3988.       automatically power down devices, enter stand-by or suspended mode,
  3989.       or perform any power-saving actions in response to AX=5305h calls
  3990.     should not be called from within a hardware interrupt handler to avoid
  3991.       reentrance problems
  3992.     the APM BIOS should never be both disabled and disengaged at the same
  3993.       time
  3994. SeeAlso: AX=5309h,AX=530Dh,AX=530Fh
  3995. --------p-155309-----------------------------
  3996. INT 15 - Advanced Power Management v1.0+ - RESTORE POWER-ON DEFAULTS
  3997.     AX = 5309h
  3998.     BX = device ID for all devices power-managed by APM
  3999.         0001h (APM v1.1)
  4000.         FFFFh (APM v1.0)
  4001. Return: CF clear if successful
  4002.     CF set on error
  4003.         AH = error code (03h,09h,0Bh) (see #00473)
  4004. Note:    should not be called from within a hardware interrupt handler to avoid
  4005.       reentrance problems
  4006. SeeAlso: AX=5308h
  4007. --------p-15530A-----------------------------
  4008. INT 15 - Advanced Power Management v1.0+ - GET POWER STATUS
  4009.     AX = 530Ah
  4010.     BX = device ID
  4011.         0001h all devices power-managed by APM
  4012.         80xxh specific battery unit number XXh (01h-FFh) (APM v1.2)
  4013. Return: CF clear if successful
  4014.         BH = AC line status
  4015.         00h off-line
  4016.         01h on-line
  4017.         02h on backup power (APM v1.1)
  4018.         FFh unknown
  4019.         other reserved
  4020.         BL = battery status (see #00476)
  4021.         CH = battery flag (APM v1.1+) (see #00477)
  4022.         CL = remaining battery life, percentage
  4023.         00h-64h (0-100) percentage of full charge
  4024.         FFh unknown
  4025.         DX = remaining battery life, time (APM v1.1) (see #00478)
  4026.         ---if specific battery unit specified---
  4027.         SI = number of battery units currently installed
  4028.     CF set on error
  4029.         AH = error code (09h,0Ah) (see #00473)
  4030. Notes:    should not be called from within a hardware interrupt handler to avoid
  4031.       reentrance problems
  4032.     supported in real mode (INT 15) and both 16-bit and 32-bit protected
  4033.       mode
  4034.  
  4035. (Table 00476)
  4036. Values for APM v1.0+ battery status:
  4037.  00h    high
  4038.  01h    low
  4039.  02h    critical
  4040.  03h    charging
  4041.  FFh    unknown
  4042.  other    reserved
  4043. SeeAlso: #00477,#00478
  4044.  
  4045. Bitfields for APM v1.1+ battery flag:
  4046. Bit(s)    Description    (Table 00477)
  4047.  0    high
  4048.  1    low
  4049.  2    critical
  4050.  3    charging
  4051.  4    selected battery not present (APM v1.2)
  4052.  5-6    reserved (0)
  4053.  7    no system battery
  4054. Note:    all bits set (FFh) if unknown
  4055. SeeAlso: #00476,#00478
  4056.  
  4057. Bitfields for APM v1.1+ remaining battery life:
  4058. Bit(s)    Description    (Table 00478)
  4059.  15    time units: 0=seconds, 1=minutes
  4060.  14-0    battery life in minutes or seconds
  4061. Note:    all bits set (FFFFh) if unknown
  4062. SeeAlso: #00476,#00477
  4063. --------p-15530B-----------------------------
  4064. INT 15 - Advanced Power Management v1.0+ - GET POWER MANAGEMENT EVENT
  4065.     AX = 530Bh
  4066. Return: CF clear if successful
  4067.         BX = event code (see #00479)
  4068.         CX = event information (APM v1.2) if BX=0003h or BX=0004h
  4069.         bit 0: PCMCIA socket was powered down in suspend state
  4070.     CF set on error
  4071.         AH = error code (03h,0Bh,80h) (see #00473)
  4072. Notes:    although power management events are often asynchronous, notification
  4073.       will not be made until polled via this call to permit software to
  4074.       only receive event notification when it is prepared to process
  4075.       power management events; since these events are not very time-
  4076.       critical, it should be sufficient to poll once or twice per second
  4077.     the critical resume notification is made after the system resumes
  4078.       from an emergency suspension; normally, the system BIOS only notifies
  4079.       its partner that it wishes to suspend and relies on the partner to
  4080.       actually request the suspension, but no notification is made on an
  4081.       emergency suspension
  4082.     should not be called from within a hardware interrupt handler to avoid
  4083.       reentrance problems
  4084. SeeAlso: AX=5307h,AX=5307h/CX=0001h"STAND-BY",AX=5307h/CX=0002h"SUSPEND"
  4085.  
  4086. (Table 00479)
  4087. Values for APM event code:
  4088.  0001h    system stand-by request
  4089.  0002h    system suspend request
  4090.  0003h    normal resume system notification
  4091.  0004h    critical resume system notification
  4092.  0005h    battery low notification
  4093. ---APM v1.1---
  4094.  0006h    power status change notification
  4095.  0007h    update time notification
  4096.  0008h    critical system suspend notification
  4097.  0009h    user system standby request notification
  4098.  000Ah    user system suspend request notification
  4099.  000Bh    system standby resume notification
  4100. ---APM v1.2---
  4101.  000Ch    capabilities change notification (see AX=5310h)
  4102. ------
  4103.  000Dh-00FFh reserved system events
  4104.  01xxh    reserved device events
  4105.  02xxh    OEM-defined APM events
  4106.  0300h-FFFFh reserved
  4107. --------p-15530C-----------------------------
  4108. INT 15 - Advanced Power Management v1.1+ - GET POWER STATE
  4109.     AX = 530Ch
  4110.     BX = device ID (see #00474)
  4111. Return: CF clear if successful
  4112.         CX = system state ID (see #00475)
  4113.     CF set on error
  4114.         AH = error code (01h,09h) (see #00473)
  4115. SeeAlso: AX=5307h
  4116. --------p-15530D-----------------------------
  4117. INT 15 - Advanced Power Management v1.1+ - EN/DISABLE DEVICE POWER MANAGEMENT
  4118.     AX = 530Dh
  4119.     BX = device ID (see #00474)
  4120.     CX = function
  4121.         0000h disable power management
  4122.         0001h enable power management
  4123. Return: CF clear if successful
  4124.     CF set on error
  4125.         AH = error code (01h,03h,09h,0Ah,0Bh) (see #00473)
  4126. Desc:    specify whether automatic power management should be active for a
  4127.       given device
  4128. SeeAlso: AX=5308h,AX=530Fh
  4129. --------p-15530E-----------------------------
  4130. INT 15 - Advanced Power Management v1.1+ - DRIVER VERSION
  4131.     AX = 530Eh
  4132.     BX = device ID of system BIOS (0000h)
  4133.     CH = APM driver major version (BCD)
  4134.     CL = APM driver minor version (BCD) (02h for APM v1.2)
  4135. Return: CF clear if successful
  4136.         AH = APM connection major version (BCD)
  4137.         AL = APM connection minor version (BCD)
  4138.     CF set on error
  4139.         AH = error code (03h,09h,0Bh) (see #00473)
  4140. SeeAlso: AX=5300h,AX=5303h
  4141. --------p-15530F-----------------------------
  4142. INT 15 - Advanced Power Management v1.1+ - ENGAGE/DISENGAGE POWER MANAGEMENT
  4143.     AX = 530Fh
  4144.     BX = device ID (see #00474)
  4145.     CX = function
  4146.         0000h disengage power management
  4147.         0001h engage power management
  4148. Return: CF clear if successful
  4149.     CF set on error
  4150.         AH = error code (01h,09h) (see #00473)
  4151. Notes:    unlike AX=5308h, this call does not affect the functioning of the APM
  4152.       BIOS
  4153.     when cooperative power management is disengaged, the APM BIOS performs
  4154.       automatic power management of the system or device
  4155. SeeAlso: AX=5308h,AX=530Dh
  4156. --------p-155310-----------------------------
  4157. INT 15 - Advanced Power Management v1.2 - GET CAPABILITIES
  4158.     AX = 5310h
  4159.     BX = device ID (see #00474)
  4160.         0000h (APM BIOS)
  4161.         other reserved
  4162. Return: CF clear if successful
  4163.         BL = number of battery units supported (00h if no system batteries)
  4164.         CX = capabilities flags (see #00480)
  4165.     CF set on error
  4166.         AH = error code (01h,09h,86h) (see #00473)
  4167. Notes:    this function is supported via the INT 15, 16-bit protected mode, and
  4168.       32-bit protected mode interfaces; it does not require that a
  4169.       connection be established prior to use
  4170.     this function will return the capabilities currently in effect, not
  4171.       any new settings which have been made but do not take effect until
  4172.       a system restart
  4173. SeeAlso: AX=5300h,AX=530Fh,AX=5311h,AX=5312h,AX=5313h
  4174.  
  4175. Bitfields for APM v1.2 capabilities flags:
  4176. Bit(s)    Description    (Table 00480)
  4177.  15-8    reserved
  4178.  7    PCMCIA Ring Indicator will wake up system from suspend mode
  4179.  6    PCMCIA Ring Indicator will wake up system from standby mode
  4180.  5    Resume on Ring Indicator will wake up system from suspend mode
  4181.  4    Resume on Ring Indicator will wake up system from standby mode
  4182.  3    resume timer will wake up system from suspend mode
  4183.  2    resume timer will wake up system from standby mode
  4184.  1    can enter global suspend state
  4185.  0    can enter global standby state
  4186. --------p-155311-----------------------------
  4187. INT 15 - Advanced Power Management v1.2 - GET/SET/DISABLE RESUME TIMER
  4188.     AX = 5311h
  4189.     BX = device ID (see #00474)
  4190.         0000h (APM BIOS)
  4191.         other reserved
  4192.     CL = function
  4193.         00h disable Resume Timer
  4194.         01h get Resume Timer
  4195.         02h set Resume Timer
  4196.         CH = resume time, seconds (BCD)
  4197.         DL = resume time, minutes (BCD)
  4198.         DH = resume time, hours (BCD)
  4199.         SI = resume date (BCD), high byte = month, low byte = day
  4200.         DI = resume date, year (BCD)
  4201. Return: CF clear if successful
  4202.         ---if getting timer---
  4203.         CH = resume time, seconds (BCD)
  4204.         DL = resume time, minutes (BCD)
  4205.         DH = resume time, hours (BCD)
  4206.         SI = resume date (BCD), high byte = month, low byte = day
  4207.         DI = resume date, year (BCD)
  4208.     CF set on error
  4209.         AH = error code (03h,09h,0Ah,0Bh,0Ch,0Dh,86h) (see #00473)
  4210. Notes:    this function is supported via the INT 15, 16-bit protected mode, and
  4211.       32-bit protected mode interfaces
  4212. SeeAlso: AX=5300h,AX=5310h,AX=5312h,AX=5313h
  4213. --------p-155312-----------------------------
  4214. INT 15 - Advanced Power Management v1.2 - ENABLE/DISABLE RESUME ON RING
  4215.     AX = 5312h
  4216.     BX = device ID (see #00474)
  4217.         0000h (APM BIOS)
  4218.         other reserved
  4219.     CL = function
  4220.         00h disable Resume on Ring Indicator
  4221.         01h enable Resume on Ring Indicator
  4222.         02h get Resume on Ring Indicator status
  4223. Return: CF clear if successful
  4224.         CX = resume status (0000h disabled, 0001h enabled)
  4225.     CF set on error
  4226.         AH = error code (03h,09h,0Ah,0Bh,0Ch,86h) (see #00473)
  4227. Notes:    this function is supported via the INT 15, 16-bit protected mode, and
  4228.       32-bit protected mode interfaces
  4229. SeeAlso: AX=5300h,AX=5310h,AX=5311h,AX=5313h
  4230. --------p-155313-----------------------------
  4231. INT 15 - Advanced Power Management v1.2 - ENABLE/DISABLE TIMER-BASED REQUESTS
  4232.     AX = 5313h
  4233.     BX = device ID (see #00474)
  4234.         0000h (APM BIOS)
  4235.         other reserved
  4236.     CL = function
  4237.         00h disable timer-based requests
  4238.         01h enable timer-based requests
  4239.         02h get timer-based requests status
  4240. Return: CF clear if successful
  4241.         CX = timer-based requests status (0000h disabled, 0001h enabled)
  4242.     CF set on error
  4243.         AH = error code (03h,09h,0Ah,0Bh,86h) (see #00473)
  4244. Notes:    this function is supported via the INT 15, 16-bit protected mode, and
  4245.       32-bit protected mode interfaces
  4246.     some BIOSes set AH on return even when successful
  4247. SeeAlso: AX=5300h,AX=5310h,AX=5311h,AX=5312h
  4248. --------p-155380BH00-------------------------
  4249. INT 15 - APM SL Enhanced v1.0 - GET SUSPEND/GLOBAL STANDBY MODE
  4250.     AX = 5380h
  4251.     BH = 00h
  4252. Return: CF clear if successful
  4253.         AL = 82360SL Auto Power Off Timer High Count (APWR_TMRH)
  4254.         BL = sustdbymode (see #00481)
  4255. SeeAlso: AX=5380h/BH=01h,AX=5380h/BH=02h,AX=5380h/BH=7Fh
  4256.  
  4257. Bitfields for APM SL sustdbymode:
  4258. Bit(s)    Description    (Table 00481)
  4259.  2    ???
  4260.  1    Auto Power Off Timer Enable (APWR_TMR_EN)
  4261.  0    ???
  4262. --------p-155380BH01-------------------------
  4263. INT 15 - APM SL Enhanced v1.0 - SET SUSPEND/GLOBAL STANDBY MODE
  4264.     AX = 5380h
  4265.     BH = 01h
  4266.     BL = sustdbymode (see #00481)
  4267. Return: CF clear if successful
  4268. SeeAlso: AX=5380h/BH=00h,AX=5380h/BH=7Fh
  4269. --------p-155380BH02-------------------------
  4270. INT 15 - APM SL Enhanced v1.0 - GET GLOBAL STANDBY TIMER
  4271.     AX = 5380h
  4272.     BH = 02h
  4273. Return: CF clear if successful
  4274.     SI:DI = timer count in seconds (actually 1.024 seconds)
  4275. Desc:    reads the value of 82360SL GSTDBY_TMRH & GSTDBY_TMRL registers
  4276. SeeAlso: AX=5380h/BH=00h,AX=5380h/BH=03h,AX=5380h/BH=04h,AX=5380h/BH=7Fh
  4277. --------p-155380BH03-------------------------
  4278. INT 15 - APM SL Enhanced v1.0 - SET GLOBAL STANDBY TIMER
  4279.     AX = 5380h
  4280.     BH = 03h
  4281.     SI:DI = timer count in seconds (actually 1.024 seconds)
  4282. Return: CF clear if successful
  4283. Desc:    sets the value of 82360SL GSTDBY_TMRH & GSTDBY_TMRL registers
  4284. Note:    the maximum timer count is 268431 seconds
  4285. SeeAlso: AX=5380h/BH=02h,AX=5380h/BH=7Fh
  4286. --------p-155380BH04-------------------------
  4287. INT 15 - APM SL Enhanced v1.0 - GET AUTO POWER OFF TIMER
  4288.     AX = 5380h
  4289.     BH = 04h
  4290. Return: CF clear if successful
  4291.     SI:DI = timer count in seconds (actually 1.024 seconds)
  4292. Desc:    reads the value of 82360SL APWR_TMRH & APWR_TMRL registers
  4293. SeeAlso: AX=5380h/BH=02h,AX=5380h/BH=05h,AX=5380h/BH=06h,AX=5380h/BH=7Fh
  4294. --------p-155380BH05-------------------------
  4295. INT 15 - APM SL Enhanced v1.0 - SET AUTO POWER OFF TIMER
  4296.     AX = 5380h
  4297.     BH = 05h
  4298.     SI:DI = timer count in seconds (actually 1.024 seconds)
  4299. Return: CF clear if successful
  4300. Desc:    sets the value of 82360SL APWR_TMRH & APWR_TMRL registers
  4301. Note:    the maximum timer count is 134213 seconds
  4302. SeeAlso: AX=5380h/BH=04h,AX=5380h/BH=7Fh
  4303. --------p-155380BH06-------------------------
  4304. INT 15 - APM SL Enhanced v1.0 - GET RESUME CONDITION
  4305.     AX = 5380h
  4306.     BH = 06h
  4307. Return: CF clear if successful
  4308.         BL = resume condition (see #00482)
  4309. Desc:    reads the value of 82360SL RESUME_MASK register
  4310. SeeAlso: AX=5380h/BH=04h,AX=5380h/BH=07h,AX=5380h/BH=08h,AX=5380h/BH=7Fh
  4311.  
  4312. Bitfields for APM SL resume condition:
  4313. Bit(s)    Description    (Table 00482)
  4314.  7-2    reserved (0)
  4315.  1    alarm enabled (resume on CMOS alarm)
  4316.  0    ring enabled
  4317. --------p-155380BH07-------------------------
  4318. INT 15 - APM SL Enhanced v1.0 - SET RESUME CONDITION
  4319.     AX = 5380h
  4320.     BH = 07h
  4321.     BL = resume condition (see #00482)
  4322. Return: CF clear if successful
  4323. Desc:    sets the value of 82360SL RESUME_MASK register
  4324. SeeAlso: AX=5380h/BH=06h,AX=5380h/BH=7Fh
  4325. --------p-155380BH08-------------------------
  4326. INT 15 - APM SL Enhanced v1.0 - GET CALENDAR EVENT TIME
  4327.     AX = 5380h
  4328.     BH = 08h
  4329. Return: CF clear if successful
  4330.         CH = hours
  4331.         CL = minutes
  4332.         SI = seconds
  4333.     CF set on error
  4334.         AH = error code (see #00483)
  4335. Desc:    gets calendar event time from CMOS ram
  4336. SeeAlso: AX=5380h/BH=06h,AX=5380h/BH=09h,AX=5380h/BH=0Ah,AX=5380h/BH=7Fh
  4337.  
  4338. (Table 00483)
  4339. Values for APM SL error code:
  4340.  02h    no alarm set
  4341.  03h    no battery
  4342. --------p-155380BH09-------------------------
  4343. INT 15 - APM SL Enhanced v1.0 - SET CALENDAR EVENT TIME
  4344.     AX = 5380h
  4345.     BH = 09h
  4346.     CH = hours
  4347.     CL = minutes
  4348.     SI = seconds
  4349. Return: CF clear if successful
  4350.     CF set on error
  4351.         AH = error code (see #00483)
  4352. Desc:    sets calendar event time in CMOS ram, enables Alarm resume
  4353. SeeAlso: AX=5380h/BH=08h,AX=5380h/BH=7Fh
  4354. --------p-155380BH0A-------------------------
  4355. INT 15 - APM SL Enhanced v1.0 - GET CALENDAR EVENT DATE
  4356.     AX = 5380h
  4357.     BH = 0Ah
  4358. Return: CF clear if successful
  4359.         SI = century
  4360.         DI = year
  4361.         CH = month
  4362.         CL = day
  4363.     CF set on error
  4364.         AH = error code (see #00483)
  4365. Desc:    reads calendar event date from Extended CMOS ram
  4366. SeeAlso: AX=5380h/BH=08h,AX=5380h/BH=0Bh,AX=5380h/BH=0Ch,AX=5380h/BH=7Fh
  4367. --------p-155380BH0B-------------------------
  4368. INT 15 - APM SL Enhanced v1.0 - SET CALENDAR EVENT DATE
  4369.     AX = 5380h
  4370.     BH = 0Bh
  4371.     SI = century
  4372.     DI = year
  4373.     CH = month
  4374.     CL = day
  4375. Return: CF clear if successful
  4376.     CF set on error
  4377.         AH = error code (see #00483)
  4378. Desc:    sets calendar event date in Extended CMOS ram
  4379. SeeAlso: AX=5380h/BH=0Ah,AX=5380h/BH=7Fh
  4380. --------p-155380BH0C-------------------------
  4381. INT 15 - APM SL Enhanced v1.0 - GET CPU SPEED MODE
  4382.     AX = 5380h
  4383.     BH = 0Ch
  4384. Return: CF clear if successful
  4385.     CL = CPU clock divider (1,2,4 or 8)
  4386.     BL = autocpumode ???
  4387. Desc:    reads bits 4-5 of CPUPWRMODE register
  4388. SeeAlso: AX=5380h/BH=0Ah,AX=5380h/BH=0Dh,AX=5380h/BH=7Fh
  4389. --------p-155380BH0D-------------------------
  4390. INT 15 - APM SL Enhanced v1.0 - SET CPU SPEED MODE
  4391.     AX = 5380h
  4392.     BH = 0Dh
  4393.     CL = CPU clock divider (1,2,4 or 8)
  4394.     BL = autocpumode ???
  4395. Return: CF clear if successful
  4396. Desc:    writes bits 4-5 of CPUPWRMODE register
  4397. SeeAlso: AX=5380h/BH=0Ch,AX=5380h/BH=7Eh,AX=5380h/BH=7Fh
  4398. --------p-155380BH7E-------------------------
  4399. INT 15 - APM SL Enhanced v1.0 - SL HW PARAMETER
  4400.     AX = 5380h
  4401.     BH = 7Eh
  4402. Return: AL = ???
  4403.         03h on A-Step 386SL BIOSes
  4404.         12h on later steps
  4405.     BX = Control port (00B0h)
  4406. SeeAlso: AX=5380h/BH=00h,AX=5380h/BH=7Fh
  4407. --------p-155380BH7F-------------------------
  4408. INT 15 - Advanced Power Management v1.1 - OEM APM INSTALLATION CHECK
  4409.     AX = 5380h
  4410.     BH = 7Fh
  4411. Return: CF clear if successful
  4412.         BX = OEM identifier
  4413.         all other registers OEM-defined
  4414.         ---Intel SL Enhanced Option BIOS---
  4415.         BX = 534Ch ('SL')
  4416.         CL = 4Fh ('O')
  4417.         AL = version (10h = 1.0)
  4418.         ---HP APM BIOS---
  4419.         BX = 4850h ('HP')
  4420.         CX = version (0001h)
  4421.     CF set on error
  4422.         AH = error code (03h) (see #00473)
  4423. SeeAlso: AX=5380h/BH=00h
  4424. --------p-155380-----------------------------
  4425. INT 15 - Advanced Power Management v1.1 - OEM APM FUNCTIONS
  4426.     AX = 5380h
  4427.     BH <> 7Fh
  4428.     all other registers OEM-defined
  4429. Return: OEM-defined
  4430. SeeAlso: AX=5380h/BH=7Fh
  4431. --------p-155380BX8000-----------------------
  4432. INT 15 U - Phoenix BIOS 4.0 Rel 6.0 - ???
  4433.     AX = 5380h
  4434.     BX = 8000h
  4435.     CX = 0020h
  4436. Return: ???
  4437. Note:    although a check for the indicated value is present in the examined
  4438.       copy of the BIOS, no code was associated with it (possibly an OEM
  4439.       option not included in that copy) and this function always returns
  4440.       CF set/AH=03h if CX=0020h and CF set/AH=86h for CX<>0020h
  4441. SeeAlso: AX=5380h/BX=8001h
  4442. --------p-155380BX8001-----------------------
  4443. INT 15 U - Phoenix BIOS 4.0 Rel 6.0 - ???
  4444.     AX = 5380h
  4445.     BX = 8001h
  4446.     CX = 0020h
  4447. Return: ???
  4448. Note:    although a check for the indicated value is present in the examined
  4449.       copy of the BIOS, no code was associated with it (possibly an OEM
  4450.       option not included in that copy)
  4451. SeeAlso: AX=5380h/BX=8000h
  4452. --------X-1553B0BH00-------------------------
  4453. INT 15 - Intel System Management Bus - RESERVED
  4454.     AX = 53B0h
  4455.     BH = 00h
  4456. Program: the SMBus is a variant of ACCESS.bus being used by Intel and Duracell
  4457.       for the Smart Battery proposal, but designed to be generic enough to
  4458.       handle other devices besides batteries
  4459. --------X-1553B0BH01-------------------------
  4460. INT 15 - Intel System Management Bus - INSTALLATION CHECK
  4461.     AX = 53B0h
  4462.     BH = 01h
  4463.     BL = 72h ('r')
  4464.     CX = 6164h ('ad')
  4465. Return: CF clear if installed
  4466.         AH = SMBus BIOS Interface Specification major version (01h)
  4467.         AL = SMBus BIOS Interface Specification minor version (00h)
  4468.         BL = number of SMBus devices present
  4469.         CX = 6941h ('iA')
  4470.         DX = vendor-specified SMBus hardware code
  4471.         0000h means undefined hardware type
  4472.     CF set if error
  4473.         AH = Error code 0Ah, 86h (see #00484)
  4474. Note:    this function is only supported in INT 15h mode
  4475. SeeAlso: AX=53B0h/BH=02h,AX=53B0h/BH=03h,AX=53B0h/BH=04h,AX=53B0h/BH=06h
  4476. SeeAlso: #01105 at INT 1A/AX=B10Ah/SF=8086h
  4477.  
  4478. (Table 00484)
  4479. Values for Intel System Management Bus error codes:
  4480.  00h    SMBus OK
  4481.  01h    SMBus connect failed
  4482.  02h    SMBus already connected (see also #00485)
  4483.  03h    SMBus disconnect failed
  4484.  04h    SMBus not connected
  4485.  05h    SMBus INT 15 interface disabled
  4486.  06h    SMBus device address request out of range
  4487.  07h    SMBus unknown failure
  4488.  08h    SMBus message list empty
  4489.  09h    SMBus message list overflow
  4490.  0Ah    SMBus invalid signature
  4491.  10h    SMBus device address not acknowledged
  4492.  11h    SMBus device error detected
  4493.  12h    SMBus device command access denied
  4494.  13h    SMBus unknown error
  4495.  14h    SMBus transaction pending
  4496.  15h    SMBus no transaction pending
  4497.  16h    SMBus request does not match pending transaction
  4498.  17h    SMBus device access denied
  4499.  18h    SMBus timeout
  4500.  19h    SMBus protocol not supported
  4501.  1Ah    SMBus busy
  4502.  1Bh    SMBus SMI detected
  4503.  80h    SMBus OK (previously unreported SMI occurred)
  4504.  86h    SMBus not supported
  4505.  
  4506. (Table 00485)
  4507. Values for Intel System Management Bus Already Connected sub-error codes:
  4508.  01h    real mode connect already established
  4509.  02h    16-bit PMode connect already established
  4510.  03h    32-bit PMode connect already established
  4511. SeeAlso: #00484
  4512. --------X-1553B0BH02-------------------------
  4513. INT 15 - Intel System Management Bus - REAL MODE CONNECT
  4514.     AX = 53B0h
  4515.     BH = 02h
  4516.     CX = 6941h ('iA')
  4517. Return: CF clear if successful
  4518.         AX = SMBus Real mode code segment
  4519.         BX = offset of entry point into SMBus BIOS Interface
  4520.         CX = SMBus Real mode data segment
  4521.     CF set if error
  4522.         AH = error code (01h,02h,0Ah,86h) (see #00484)
  4523.         AL = sub-error code if error code is 02h (see #00485)
  4524. Desc:    connect to SMBus interface; once connected, all SMBus calls are made
  4525.       to the supplied entry point instead of INT 15 (with registers
  4526.       identical to those described here for INT 15)
  4527. Notes:    Support for this function is optional
  4528.     this function is only supported in INT 15 mode when implemented
  4529. SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=03h,AX=53B0h/BH=04h,AX=53B0h/BH=05h
  4530. --------X-1553B0BH03-------------------------
  4531. INT 15 - Intel System Management Bus - 16-BIT PROTECTED-MODE CONNECT
  4532.     AX = 53B0h
  4533.     BH = 03h
  4534.     CX = 6941h ('iA')
  4535. Return: CF clear if successful
  4536.         AX = SMBus 16-bit code segment (real mode base address)
  4537.         BX = offset of entry point into SMBus BIOS Interface
  4538.         CX = SMBus 16-bit data segment (real mode base address)
  4539.         SI = code segment length in bytes
  4540.         DI = data segment length in bytes
  4541.     CF set if error
  4542.         AH = error code (01h,02h,0Ah,86h) (see #00484)
  4543.         AL = sub-error code if error code is 02h (see #00485)
  4544. Desc:    connect to SMBus interface; once connected, all SMBus calls are made
  4545.       to the supplied entry point instead of INT 15 (with registers
  4546.       identical to those described here for INT 15)
  4547. Notes:    before calling the entry point, two descriptors must be initialized
  4548.       in the GDT or LDT.  They must be consecutive and be in the order of
  4549.       code, then data.  At the time    of the call, the descriptors must be
  4550.       valid and have CPL=0.
  4551.     the code descriptor must be ring-0 privilege
  4552.     this function is only supported in INT 15 mode
  4553. SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=02h,AX=53B0h/BH=04h,AX=53B0h/BH=05h
  4554. --------X-1553B0BH04-------------------------
  4555. INT 15 - Intel System Management Bus - 32-BIT PROTECTED-MODE CONNECT
  4556.     AX = 53B0h
  4557.     BH = 04h
  4558.     CX = 6941h ('iA')
  4559. Return: CF clear if successful
  4560.         AX = SMBus 32-bit code segment (real mode base address)
  4561.         EBX = offset of entry point into SMBus BIOS Interface
  4562.         CX = SMBus 16-bit code segment (real mode base address)
  4563.         DX = SMBus data segment (real mode base address)
  4564.         SI = code segment length in bytes
  4565.         DI = data segment length in bytes
  4566.     CF set if error
  4567.         AH = error code (01h,02h,0Ah,86h) (see #00484)
  4568.         AL = sub-error code if error code is 02h (see #00485)
  4569. Desc:    connect to SMBus interface; once connected, all SMBus calls are made
  4570.       to the supplied entry point instead of INT 15 (with registers
  4571.       identical to those described here for INT 15)
  4572. Notes:    before calling the entry point, two descriptors must be initialized in
  4573.       the GDT or LDT.  They must be consecutive and be in the order of
  4574.       32-bit code, 16-bit code, then data.    At the time of the call, the
  4575.       descriptors must be valid and have CPL=0.
  4576.     the code descriptors must be ring-0 privilege
  4577.     this function is supported only in INT 15 mode
  4578. SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=02h,AX=53B0h/BH=03h,AX=53B0h/BH=05h
  4579. --------X-1553B0BH05-------------------------
  4580. INT 15 - Intel System Management Bus - DISCONNECT
  4581.     AX = 53B0h
  4582.     BH = 05h
  4583.     CX = 6941h ('iA')
  4584. Return: CF clear if successful
  4585.         AH = 00h (SMBus OK)
  4586.     CF set if error
  4587.         AH = error code (03h,04h,05h,0Ah,86h) (see #00484)
  4588. Note:    this function is supported in connected mode (far CALL entry point)
  4589.       only
  4590. SeeAlso: AX=53B0h/BH=01h,AX=53B0h/BH=02h,AX=53B0h/BH=03h,AX=53B0h/BH=04h
  4591. --------X-1553B0BH06-------------------------
  4592. INT 15 - Intel System Management Bus - GET DEVICE ADDRESSES
  4593.     AX = 53B0h
  4594.     BH = 06h
  4595.     BL = position in list to report
  4596.     CH = 6941h ('iA')
  4597. Return: CF clear if successful
  4598.         AH = 00h (SMBus OK)
  4599.         BH = number of SMBus devices
  4600.         BL = SMBus Device Address of device at position BL in list
  4601.         (see #00486)
  4602.     CF set if error
  4603.         AH = error code (06h,0Ah,86h) (see #00484)
  4604. Desc:    retrieves already assigned SMBus device addresses
  4605. Notes:    this function is supported in INT 15h mode only
  4606.     bit 0 of the device address indicates read/write, so a device may
  4607.       be listed at both xxxxxxx0b and xxxxxxx1b
  4608. SeeAlso: I2C A0h [and I2C.LST in general]
  4609.  
  4610. (Table 00486)
  4611. Values for System Management Bus predefined device addresses:
  4612.  10h    SMBus host
  4613.  12h    Smart Battery charger
  4614.  14h    Smart Battery selector
  4615.  16h    Smart Battery
  4616.  18h    SMBus Alert response
  4617.  50h    ACCESS.bus host
  4618.  58h    LCD contrast controller
  4619.  5Ah    CCFL backlight driver
  4620.  6Eh    ACCESS.bus default address
  4621.  80h-86h PCMCIA socket controllers
  4622.  88h    VGA graphics controller
  4623.  90h-96h unrestricted addresses
  4624.  82h    SMBus device default address
  4625. --------X-1553B0BH07-------------------------
  4626. INT 15 - Intel System Management Bus - RETRIEVE CRITICAL MESSAGES
  4627.     AX = 53B0h
  4628.     BH = 07h
  4629.     CX = 6941h ('iA')
  4630. Return: CF clear if successful
  4631.         AH = 00h (SMBus OK)
  4632.         AL = device address
  4633.         BX = device message
  4634.     CF set if error
  4635.         AH = error code (05h,07h,08h,09h,0Ah,86h) (see #00484)
  4636. Desc:    retrieves oldest queued critical message from an SMBus device to the
  4637.       host
  4638. Notes:    up to five messages are queued; if the queue is full, messages will be
  4639.       lost and error 09h returned
  4640. --------X-1553B0BH08-------------------------
  4641. INT 15 - Intel System Management Bus - RESERVED
  4642.     AX = 53B0h
  4643.     BH = 08h-0Fh
  4644. --------X-1553B0BH10-------------------------
  4645. INT 15 - Intel System Management Bus - REQUEST
  4646.     AX = 53B0h
  4647.     BH = 10h
  4648.     BL = protocol (see #00487)
  4649.     CH = device address
  4650.     CL = device command (see #00488)
  4651.     DH = MSB Data or block length (for BlockWrite)
  4652.     DL = LSB Data or first byte of block (for BlockWrite)
  4653. Return: CF clear if successful
  4654.         AH = 00h or 80h (SMBus OK)
  4655.          (80h indicates a previously unreported SMI took place)
  4656.     CF set if error
  4657.         AH = error code (05h,10h,11h,12h,13h,14h,17h,19h,1Ah,86h)
  4658.           (see #00484)
  4659. Desc:    request access to a device on the SMBus
  4660. SeeAlso: AX=53B0h/BH=11h, AX=53B0h/BH=13h
  4661.  
  4662. (Table 00487)
  4663. Values for Intel System Management Bus protocol codes:
  4664.  00h    Quick Command
  4665.  01h    Send Byte
  4666.  02h    Receive Byte
  4667.  03h    Write Byte
  4668.  04h    Read Byte
  4669.  05h    Write Word
  4670.  06h    Read Word
  4671.  07h    Block Write
  4672.  08h    Block Read
  4673.  09h    Process Call
  4674.  0Ah-FFh reserved
  4675. SeeAlso: #00488
  4676.  
  4677. (Table 00488)
  4678. Values for Intel System Management Bus Smart Battery command codes:
  4679.  Cmd    Protocol(s)    Description
  4680.  00h    Rd/Wr Word    "ManufacturerAccess" implementation-specific
  4681.  01h    Rd/Wr Word    get/set Low Capacity Alarm threshold
  4682.  02h    Rd/Wr Word    get/set Remaining Time Alarm value (in minutes)
  4683.  03h    Rd/Wr Word    get/set battery characteristics (see #00489)
  4684.  04h    Rd/Wr Word    "AtRate" indicate charge/discharge rate
  4685.  05h    Read Word    "AtRateTimeToFull" time to completely charge (in min.)
  4686.  06h    Read Word    "AtRateTimeToEmpty" time to entirely discharge (min.)
  4687.  07h    Read Word    "AtRateOK" boolean: can battery supply another 10sec?
  4688.  08h    Read Word    internal battery temperature (in 0.1 Kelvins)
  4689.  09h    Read Word    current battery voltage in millivolts
  4690.  0Ah    Read Word    current flowing through battery in milliamperes
  4691.             (positive if charging, negative if discharging)
  4692.  0Bh    Read Word    average current over the past minute
  4693.  0Ch    Read Word    expected error margin in capacity computations in %
  4694.  0Dh    Read Word    predicted remaining charge as % of full charge
  4695.  0Eh    Read Word    predicted remaining charge as % of design capacity
  4696.  0Fh    Read Word    predicted remaining charge in mAh or 10mWh
  4697.  10h    Read Word    predicted full charge capacity in mAh or 10mWh
  4698.  11h    Read Word    predicted remaining battery life in minutes
  4699.             FFFFh = not discharging
  4700.  12h    Read Word    rolling average of predicted life over past minute
  4701.  13h    Read Word    rolling average of predicted charge time over past min.
  4702.             FFFFh = not charging
  4703.  14h    Read Word    get battery's desired charging current in mA
  4704.  14h    Write Word    set charging current in mA
  4705.  15h    Read Word    get battery's desired charging current in mV
  4706.  15h    Write Word    set desired charging voltage in mV
  4707.  16h    Read Word    get current battery status (see #00490)
  4708.  17h    Read Word    get number of charge/discharge cycles for battery
  4709.  18h    Read Word    get design capacity in mAh or 10mWh
  4710.  19h    Read Word    get design voltage
  4711.  1Ah    Read Word    get specification information (see #00491)
  4712.  1Bh    Read Word    get manufacture date (see #01665 at INT 21/AX=5700h)
  4713.  1Ch    Read Word    get serial number
  4714.  1Dh-1Fh        reserved
  4715.  20h    Read Block    get manufacturer's name
  4716.  21h    Read Block    get device name
  4717.  22h    Read Block    get device chemistry (see #00492)
  4718.  23h    Read Block    get manufacturer data
  4719.  24h-2Eh        reserved
  4720.  2Fh            manufacturer-specific
  4721.  30h-3Bh        reserved
  4722.  3Ch-3Fh        manufacturer-specific
  4723. Note:    bits 7-6 are reserved for addressing multiple batteries in a future
  4724.       version of the specification
  4725. SeeAlso: #00487
  4726.  
  4727. Bitfields for Smart Battery battery characteristics:
  4728. Bit(s)    Description    (Table 00489)
  4729.  0    battery has internal charge controller (read-only)
  4730.  1    primary/secondary battery support (read-only)
  4731.  6-2    reserved
  4732.  7    conditioning cycle requested
  4733.  8    internal charge controller enabled
  4734.  9    battery operating in primary mode
  4735.  13-10    reserved
  4736.  14    disable broadcast to charger
  4737.  15    report capacity in units of 10mW / 10mWh instead of mA / mAh
  4738. SeeAlso: #00488,#00490
  4739.  
  4740. Bitfields for Smart Battery battery status:
  4741. Bit(s)    Description    (Table 00490)
  4742.  15    overcharged
  4743.  14    terminate-charge alarm
  4744.  13    reserved
  4745.  12    over-temperature alarm
  4746.  11    terminate-discharge alarm
  4747.  10    reserved
  4748.  9    remaining-capacity alarm
  4749.  8    remaining-time alarm
  4750.  7    initialized
  4751.  6    charging
  4752.  5    fully charged
  4753.  4    fully discharged
  4754.  3-0    error codes
  4755.     0000 OK
  4756.     0001 busy
  4757.     0010 reserved command
  4758.     0011 unsupported command
  4759.     0100 access denied (tried to write to read-only value)
  4760.     0101 overflow/underflow
  4761.     0110 bad size
  4762.     0111 unknown error
  4763. SeeAlso: #00488,#00489,#00491
  4764.  
  4765. Bitfields for Smart Battery specification information:
  4766. Bit(s)    Description    (Table 00491)
  4767.  3-0    SmartBattery specification minor revision number
  4768.  7-4    SmartBattery specification version number
  4769.  11-8    voltage scaling (0-3, multiply voltages by 10^scale)
  4770.  15-12    current scaling (0-3, multiply currents by 10^scale)
  4771. SeeAlso: #00488,#00490
  4772.  
  4773. (Table 00492)
  4774. Values for Smart Battery device chemistry (not case-sensitive):
  4775.  "LION"    Lithium ion
  4776.  "NiMH"    Nickel metal hydride
  4777.  "PbAc"    lead-acid
  4778.  "NiCd" Nickel Cadmium
  4779.  "NiZn" Nickel Zinc
  4780.  "RAM"    rechargeable Alkaline Manganese
  4781.  "ZnAr" Zinc-Air
  4782. SeeAlso: #00488
  4783. --------X-1553B0BH11-------------------------
  4784. INT 15 - Intel System Management Bus - REQUEST CONTINUATION
  4785.     AX = 53B0h
  4786.     BH = 11h
  4787.     BL = protocol (see #00487)
  4788.     CH = device address
  4789.     CL = number of valid bytes in DX (1 or 2)
  4790.     DH = MSB Data (CL = 1 or 2)
  4791.     DL = LSB Data (CL = 2)
  4792. Return: CF clear if successful
  4793.         AH = 00h (SMBus OK)
  4794.         CL = SMBus status
  4795.         00h SMBus hardware not ready for more data
  4796.         01h SMBus hardware ready for 2 more data bytes
  4797.     CF set if error
  4798.         AH = error code (05h,11h,13h,15h,16h,18h,1Bh,86h) (see #00484)
  4799. Desc:    continue WriteBlock protocol started with function 10h
  4800. SeeAlso: AX=53B0h/BH=10h, AX=53B0h/BH=13h
  4801. --------X-1553B0BH12-------------------------
  4802. INT 15 - Intel System Management Bus - REQUEST ABORT
  4803.     AX = 53B0h
  4804.     BH = 12h
  4805.     BL = protocol (see #00487)
  4806.     CH = device address
  4807.     CL = device command
  4808. Return: CF clear if successful
  4809.         AH = 00h (SMBus OK)
  4810.     CF set if error
  4811.         AH = error code (05h,13h,15h,16h,86h) (see #00484)
  4812. Desc:    stop the currently pending SMBus request; usually used to terminate
  4813.       a request after an SMI Detected error
  4814. --------X-1553B0BH13-------------------------
  4815. INT 15 - Intel System Management Bus - REQUEST DATA AND STATUS
  4816.     AX = 53B0h
  4817.     BH = 13h
  4818.     BL = protocol (see #00487)
  4819.     CH = device address
  4820.     CL = device command
  4821. Return: CF clear if successful
  4822.         AH = 00h (SMBus OK)
  4823.         CH = status
  4824.         00h no data pending, transaction complete
  4825.         01h no data pending, transaction continues
  4826.         02h data pending
  4827.         CL = number of valid bytes in DX (0-2)
  4828.         DH = MSB data
  4829.         DL = LSB data
  4830.     CF set if error
  4831.         AH = error code (05h,10h,11h,13h,15h,16h,18h,1Bh,86h) (see #00484)
  4832. Desc:    determine when a transaction is complete, gather data returned by read
  4833.       transactions
  4834. Note:    for Block Read protocol (08h), first call returns block    length in DH
  4835.       and the first byte of the block in DL
  4836. ----------1554-------------------------------
  4837. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  4838.     AH = 54h
  4839. SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
  4840. --------T-155400-----------------------------
  4841. INT 15 C - Omniview Multitasker - INSTALLATION NOTIFICATION
  4842.     AX = 5400h
  4843.     ES:BX -> device information tables
  4844.     DI:DX -> dispatcher entry point
  4845. Note:    called by OmniView to notify programs loaded before OmniView of state
  4846.       changes inside OmniView
  4847. SeeAlso: AX=5407h,INT 2F/AX=DE00h
  4848. --------T-155401-----------------------------
  4849. INT 15 C - Omniview Multitasker - PROCESS CREATION
  4850.     AX = 5401h
  4851.     ES:BX = process handle
  4852. Note:    called by OmniView to notify programs loaded before OmniView of state
  4853.       changes inside OmniView
  4854. SeeAlso: AX=5402h,INT 2F/AX=DE04h
  4855. --------T-155402-----------------------------
  4856. INT 15 C - Omniview Multitasker - PROCESS DESTRUCTION
  4857.     AX = 5402h
  4858.     ES:DX = process handle
  4859. Note:    called by OmniView to notify programs loaded before OmniView of state
  4860.       changes inside OmniView
  4861. SeeAlso: AX=5401h,INT 2F/AX=DE05h
  4862. --------T-155403-----------------------------
  4863. INT 15 C - Omniview Multitasker - SAVE
  4864.     AX = 5403h
  4865.     ES:DX = process swapping out
  4866. Note:    called by OmniView to notify programs loaded before OmniView of state
  4867.       changes inside OmniView
  4868. SeeAlso: AX=5404h,INT 2F/AX=DE08h
  4869. --------T-155404-----------------------------
  4870. INT 15 C - Omniview Multitasker - RESTORE
  4871.     AX = 5404h
  4872.     ES:DX = process swapping in
  4873. Note:    called by OmniView to notify programs loaded before OmniView of state
  4874.       changes inside OmniView
  4875. SeeAlso: AX=5403h,INT 2F/AX=DE09h
  4876. --------T-155405-----------------------------
  4877. INT 15 C - Omniview Multitasker - SWITCHING TO BACKGROUND
  4878.     AX = 5405h
  4879.     ES:DX = process swapping in
  4880. Note:    called by OmniView to notify programs loaded before OmniView of state
  4881.       changes inside OmniView
  4882. SeeAlso: AX=5406h
  4883. --------T-155406-----------------------------
  4884. INT 15 C - Omniview Multitasker - SWITCHING TO FOREGROUND
  4885.     AX = 5406h
  4886.     ES:DX = process swapping in
  4887. Note:    called by OmniView to notify programs loaded before OmniView of state
  4888.       changes inside OmniView
  4889. SeeAlso: AX=5405h
  4890. --------T-155407-----------------------------
  4891. INT 15 C - Omniview Multitasker - EXIT NOTIFICATION
  4892.     AX = 5407h
  4893. Note:    called by OmniView to notify programs loaded before OmniView of state
  4894.       changes inside OmniView
  4895. SeeAlso: AX=5400h,INT 2F/AX=DE03h
  4896. --------V-155F31-----------------------------
  4897. INT 15 C - Chips & Technologies '65530' BIOS - POST INITIALIZATION NOTIFICATION
  4898.     AX = 5F31h
  4899. Return:    nothing
  4900. Desc:    this function is called after the video BIOS completes power-up
  4901.       initialization and just prior to displaying the sign-on message
  4902. SeeAlso: AX=5F33h,AX=5F35h,INT 10/AX=5F50h
  4903. --------V-155F33-----------------------------
  4904. INT 15 C - Chips & Technologies '65530' BIOS - MODE SET HOOK
  4905.     AX = 5F33h
  4906.     BL = current width in characters
  4907.     BH = curent video mode
  4908.     CH = active display page
  4909. Return:    nothing
  4910. Desc:    this function is called at the end of a video mode set
  4911. Note:    the OEM has the option of enabling or disabling this callout, as well
  4912.       as specifying whether the callout occurs on INT 15h or INT 42h
  4913. SeeAlso: AX=5F31h,AX=5F35h,INT 10/AX=5F50h,INT 42/AX=5F33h
  4914. --------V-155F35-----------------------------
  4915. INT 15 C - Chips & Technologies '65530' BIOS - MONITOR SENSING HOOK
  4916.     AX = 5F35h
  4917. Return:    DL = boot display
  4918.         00h CRT
  4919.         01h flat panel (LCD)
  4920.         02h both simultaneously
  4921.         leave unchanged to boot according to BIOS settings
  4922. SeeAlso: AX=5F31h,AX=5F33h,INT 10/AX=5F50h
  4923. --------b-1560------------------------------------
  4924. INT 15 - HUNTER 16 - SET SYSTEM CLOCK SPEED
  4925.     AH = 60h
  4926.     AL = new speed
  4927.         00h normal (8 MHz)
  4928.         01h Slow Mode 1 (4 MHz)
  4929.         02h Slow Mode 2 (2 MHz)
  4930. Note:    the Husky Hunter 16 is an 8088-based ruggedized laptop.     Other family
  4931.       members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
  4932. SeeAlso: AX=6301h
  4933. --------p-156000-----------------------------
  4934. INT 15 U - HP 100LX/200LX - GET MAIN BATTERY LEVEL
  4935.     AX = 6000h
  4936. Return: AX = battery level
  4937. Note:    multiply the returned value with 1Bh and add 622h to get millivolts
  4938. SeeAlso: AX=6001h,AX=6002h,AX=6003h,AX=6004h
  4939. --------p-156001-----------------------------
  4940. INT 15 U - HP 100LX/200LX - GET BACKUP BATTERY LEVEL
  4941.     AX = 6001h
  4942. Return: AX = battery level
  4943. Note:    multiply the returned value with 1Bh and add 622h to get millivolts
  4944. SeeAlso: AX=6000h,AX=6002h
  4945. --------p-156002-----------------------------
  4946. INT 15 U - HP 100LX/200LX - GET POWER INFO
  4947.     AX = 6002h
  4948. Return: AL = power settings (see #00493)
  4949. SeeAlso: AX=6000h,AX=6003h,AX=6004h
  4950.  
  4951. Bitfields for power settings:
  4952. Bit(s)    Description    (Table 00493)
  4953.  0-1    unused ???
  4954.  2    card battery status low (OK if bit clear)
  4955.  3    battery charging off (disabled if bits 3-5 clear)
  4956.  4    battery charging slow
  4957.  5    battery charging fast
  4958.  6    power adaptor active
  4959.  7    battery type NiCad (alkaline if bit clear)
  4960. --------p-156003-----------------------------
  4961. INT 15 U - HP 100LX/200LX - SET MAIN BATTERY TYPE
  4962.     AX = 6003h
  4963.     BL = battery type
  4964.         00h alkaline
  4965.         01h NiCad
  4966. SeeAlso: AX=6000h,AX=6004h
  4967. --------p-156004-----------------------------
  4968. INT 15 U - HP 100LX/200LX - SET BATTERY CHARGING MODE
  4969.     AX = 6004h
  4970.     BL = charging
  4971.         00h disabled
  4972.         01h enabled
  4973. SeeAlso: AX=6000h,AX=6003h
  4974. --------b-1561------------------------------------
  4975. INT 15 - HUNTER 16 - GET POWER LEVEL
  4976.     AH = 61h
  4977. Return: AH = percentage of full power left (0..100)
  4978. Desc:    determine how much battery power is left
  4979. SeeAlso: AH=62h,AH=66h,AH=73h"HUNTER"
  4980. --------b-1561-------------------------------
  4981. INT 15 U - HP 100LX/200LX - SET ANNOUNCIATORS POSITION
  4982.     AH = 61h
  4983.     AL = position (20h = left, 60h = right)
  4984. Note:    The announciators are the indicator symbols for the Shift and Fn keys
  4985.       in the bottom line
  4986. SeeAlso: AH=62h"HP",INT 16/AH=02h
  4987. --------b-1562------------------------------------
  4988. INT 15 - HUNTER 16 - SET LOW POWER THRESHOLD
  4989.     AH = 62h
  4990.     AL = level (00h 5%, 01h 10%, ... 12h 95%)
  4991.     BX = interval between power low warnings in seconds (1..600)
  4992. Return: AH = Status
  4993. Desc:    set the level (relative to full power) when power-low warnings begin
  4994.       and the interval between the warnings
  4995. SeeAlso: AH=61h,AH=65h,AH=66h
  4996. --------b-1562-------------------------------
  4997. INT 15 U - HP 100LX/200LX - SET DISPLAY CONTRAST
  4998.     AH = 62h
  4999.     BL = contrast (00h-1Fh, 1Fh is the darkest)
  5000. SeeAlso: AH=47h"HP",AH=61h"HP"
  5001. --------b-156300----------------------------------
  5002. INT 15 - HUNTER 16 - GET IDLE TIMEOUT
  5003.     AX = 6300h
  5004. Return: AH = status
  5005.     BX = timeout in seconds (0-3600)
  5006. Desc:    get the idle timeout value, the interval without keyboard or
  5007.        communications activity before the system shuts down
  5008. SeeAlso: AX=6301h
  5009. --------b-156301----------------------------------
  5010. INT 15 - HUNTER 16 - SET IDLE TIMEOUT
  5011.     AX = 6301h
  5012.     BX = timeout in seconds (0-3600)
  5013. Desc:    sets the idle timeout value, the interval without keyboard or
  5014.       communications activity before the system shuts down
  5015. SeeAlso: AX=6300h
  5016. --------b-1564------------------------------------
  5017. INT 15 - HUNTER 16 - CONTROL RESUME MODE
  5018.     AH = 64h
  5019.     AL = new state
  5020.         00h disable Resume mode
  5021.         01h enable Resume mode
  5022. Return: AH = status
  5023. Desc:    turn Resume mode on or off. In Resume mode the system starts in
  5024.       the application that was running when it shut down as if nothing
  5025.       had happened.
  5026. SeeAlso: AH=67h,AH=68h,AH=69h
  5027. --------b-1565------------------------------------
  5028. INT 15 - HUNTER 16 - AUTHORISE CHARGING
  5029.     AH = 65h
  5030.     AL = charging level
  5031.         01h charging not allowed
  5032.         02h charging allowed until power down
  5033.         03h charging allowed until batteries changed or fail.
  5034.         Ask user if charging is still allowed on next poweron
  5035.         04h charging allowed indefinitely
  5036.     BX = 0203h
  5037.     CX = 0405h
  5038.     DX = 0607h
  5039. Return: AH = status
  5040. SeeAlso: AH=66h,AH=68h
  5041. --------b-1566------------------------------------
  5042. INT 15 - HUNTER 16 - SET BATTERY LEVEL
  5043.     AH = 66h
  5044.     AL = level in percent of maximum (0..100)
  5045. Return: AH = status
  5046. SeeAlso: AH=61h,AH=65h
  5047. --------b-1567------------------------------------
  5048. INT 15 - HUNTER 16 - CONTROL STOP MODE
  5049.     AH = 67h
  5050.     AL = mode when waiting for input
  5051.         00h use STOP mode (allows communication)
  5052.         01h use HALT mode (disallows communication)
  5053. Return: AH = status
  5054. Desc:    select the power save mode to use when waiting for input
  5055. SeeAlso: AH=69h
  5056. --------b-1568------------------------------------
  5057. INT 15 - HUNTER 16 - REQUEST POWER DOWN
  5058.     AH = 68h
  5059. Desc:    turns off the Hunter 16 if power down is allowed (see AH=69h)
  5060. SeeAlso: AH=69h
  5061. --------b-1569------------------------------------
  5062. INT 15 - HUNTER 16 - CONTROL POWER DOWN AVAILABILITY
  5063.     AH = 69h
  5064.     AL = mode
  5065.         00h inhibit power down
  5066.         01h allow power down
  5067. Return: AH = status
  5068. SeeAlso: AH=67h,AH=68h,AH=6Ah
  5069. --------b-156A------------------------------------
  5070. INT 15 - HUNTER 16 - CONTROL SLOW MODE
  5071.     AH = 6Ah
  5072.     AL = mode
  5073.         00h inhibit Slow mode
  5074.         01h allow Slow mode
  5075. Return: AH = status
  5076. SeeAlso: AH=69h
  5077. --------b-156B------------------------------------
  5078. INT 15 - HUNTER 16 - GET ROM BIOS VERSION
  5079.     AH = 6Bh
  5080. Return: BH = version number (ASCII)
  5081.     BL = release number (ASCII)
  5082.     CH = major??? release number (ASCII)
  5083.     CL = minor??? release number (ASCII)
  5084. SeeAlso: AH=6Ch
  5085. --------b-156C------------------------------------
  5086. INT 15 - HUNTER 16 - GET SERIAL NUMBER
  5087.     AH = 6Ch
  5088. Return: BL:CX = BCD serial number
  5089. Note:    when shipped, all Hunter 16s have the same Serial Number, but a
  5090.       different number can be stored (see AH=72h)
  5091. SeeAlso: AH=6Bh,AH=72h
  5092. --------b-156D------------------------------------
  5093. INT 15 - HUNTER 16 - GET EVENT DETAIL
  5094.     AH = 6Dh
  5095. Return: AH = 00h if successful
  5096.     CX:BX = event flags bit 0..31 (see #00494)
  5097. Note:    this function allows testing for events
  5098. SeeAlso: AH=6Eh,AH=6Fh
  5099.  
  5100. Bitfields for HUNTER 16 events:
  5101. Bit(s)    Description    (Table 00494)
  5102.  6    RI received
  5103.  5    RTC Alarm
  5104.  4    data received on COM2
  5105.  3    data received on COM1
  5106.  2    error on COM2
  5107.  1    error on COM1
  5108.  0    PWR button pressed
  5109. --------b-156E------------------------------------
  5110. INT 15 - HUNTER 16 - ENABLE/TRAP EVENT
  5111.     AH = 6Eh
  5112.     AL = Software Interrupt
  5113.           00h  do not trap event
  5114.           else trap as software interrupt number AL
  5115.     BH = event number (see AH=6Dh)
  5116.     BL = enable mask
  5117.         00h disable event
  5118.         01h enable event
  5119. Return: AH = 00h if successful
  5120. SeeAlso: AH=6Dh,AH=6Fh
  5121. --------b-156F------------------------------------
  5122. INT 15 - HUNTER 16 - ACKNOWLEDGE EVENT
  5123.     AH = 6Fh
  5124.     AL = event number (see AH=6Dh)
  5125. Return: AH = 00h if successful
  5126. Desc:    Acknowledges the event, so the next similar event can be detected
  5127. SeeAlso: AH=6Dh"HUNTER",AH=6Eh
  5128. --------b-1570------------------------------------
  5129. INT 15 - HUNTER 16 - CONTROL SOUND
  5130.     AH = 70h
  5131.     AL = new state
  5132.         00h disable sound
  5133.         else enable sound
  5134. Note:    the Husky Hunter 16 is an 8088-based ruggedized laptop.     Other family
  5135.       members are the Husky Hunter, Husky Hunter 16/80, and Husky Hawk.
  5136. --------x-157000-----------------------------
  5137. INT 15 - Tandy 1000SL/TL - READ FROM EEPROM
  5138.     AX = 7000h
  5139.     BL = number of word to read (00h-3Fh)
  5140. Return: CF clear if function supported
  5141.         DX = contents of EEPROM word
  5142. Note:    newer Tandy 1000-series machines use EEPROM instead of CMOS RAM in
  5143.       the clock chip to store system configuration information
  5144. SeeAlso: AX=7001h
  5145. --------x-157001-----------------------------
  5146. INT 15 - Tandy 1000SL/TL - WRITE TO EEPROM
  5147.     AX = 7001h
  5148.     BL = number of word to read (00h-3Fh)
  5149.     DX = new value for EEPROM word
  5150. Return: CF clear if function supported
  5151. Note:    the EEPROMs are normally written only by the system setup program;
  5152.       changing the values can badly mess up a Tandy
  5153. SeeAlso: AX=7000h
  5154. ----------157002-----------------------------
  5155. INT 15 U - Tandy 1000 Model ??? - GET ROM PAGE
  5156.     AX = 7002h
  5157. Return: AL = ROM page mapped at 0E0000h (0-6 (13?))
  5158. Note:    some Tandy machines have DOS and DeskMate in a 512k paged ROM.    The
  5159.       BIOS uses this call to determine what ROM page is mapped in the 64k
  5160.       segment at 0E0000h.
  5161.     the 1000TL has 8 64k ROM pages; page 7 is permanently mapped at
  5162.       0F0000h.  There may be 16 32k ROM pages on other systems.
  5163. SeeAlso: AX=7003h,INT E0"DeskMate"
  5164. ----------157003-----------------------------
  5165. INT 15 U - Tandy 1000 Model ??? - SET ROM PAGE
  5166.     AX = 7003h
  5167.     DL = ROM page to be mapped at 0E0000h (0-6 (13?))
  5168. Return: CF clear if valid ROM page specified
  5169. Note:    Some Tandy machines have DOS and DeskMate in a 512k paged ROM.    The
  5170.       BIOS uses this call to map ROM pages in the 64k segment at 0E0000h.
  5171.     The 1000TL has 8 64k ROM pages; page 7 is permanently mapped at
  5172.       0F0000h.  There may be 16 32k ROM pages on other systems.
  5173. SeeAlso: AX=7002h,INT E0"DeskMate"
  5174. --------b-1571------------------------------------
  5175. INT 15 - HUNTER 16 - SELECT POWER UP KEYS
  5176.     AH = 71h
  5177.     BL = column
  5178.     BH = row
  5179.     AL = column switch (00h disable, 01h enable)
  5180.     CL = row switch (00h disable, 01h enable)
  5181. Return: AH = status
  5182. SeeAlso: AH=7Bh,AH=88h
  5183. --------b-157200----------------------------------
  5184. INT 15 - HUNTER 16 - RESET SERIAL NUMBER
  5185.     AX = 7200h
  5186. Return: AH = 00h if successful
  5187. Desc:    reset the serial number to the default serial number present when the
  5188.       Hunter 16 was shipped
  5189. SeeAlso: AH=6Ch,AH=72h
  5190. --------b-1572------------------------------------
  5191. INT 15 - HUNTER 16 - REDIRECT SERIAL NUMBER
  5192.     AH = 72h
  5193.     AL nonzero
  5194.     DS:BX -> new serial number (6 ASCII digits)
  5195. Return: AH = 00h if successful
  5196. Desc:    install a new serial number
  5197. SeeAlso: AH=6Ch,AX=7200h
  5198. --------b-1573------------------------------------
  5199. INT 15 - HUNTER 16 - GET ORACLE GT POWER LEVEL
  5200.     AH = 73h
  5201.     AL = drive (0: A:, 1: B:)
  5202. Return: AH = status
  5203.         00h successful
  5204.         FFh Oracle GT drive not connected
  5205.     AL = power level in percent of maximum (0..100)
  5206. Desc:    get the power remaining in the Oracle GT batteries
  5207. SeeAlso: AH=61h
  5208. --------b-1574------------------------------------
  5209. INT 15 - HUNTER 16 - SET BACKLIGHT POWER UP STATE
  5210.     AH = 74h
  5211.     AL = new level
  5212.         01h off
  5213.         02h unchanged
  5214.         03h change level
  5215.         BL = desired level (00h-7Fh)
  5216. Return: AH = status
  5217. Desc:    select the backlight level to use when the Hunter is next turned on
  5218. SeeAlso: AH=64h,AH=75h,INT 10/AH=64h,INT 10/AH=78h
  5219. --------b-1575------------------------------------
  5220. INT 15 - HUNTER 16 - SET CONTRAST POWER UP STATE
  5221.     AH = 75h
  5222.     AL = new level
  5223.         01h off
  5224.         02h unchanged
  5225.         03h change level
  5226.         BL = desired level (00h-7Fh)
  5227. Return: AH = status
  5228. Desc:    select the LCD contrast level to use when the Hunter is next turned on
  5229. SeeAlso: AH=63h,AH=74h
  5230. --------b-1576------------------------------------
  5231. INT 15 - HUNTER 16 - CONTROL POWER SAVE
  5232.     AH = 76h
  5233.     BX = power save control (see #00495)
  5234. SeeAlso: AH=74h
  5235.  
  5236. Bitfields for HUNTER 16 power save control:
  5237. Bit(s)    Description    (Table 00495)
  5238.  0    power save enabled
  5239.  1    inhibit power save when waiting for COM1 data
  5240.  2    inhibit power save when waiting for COM2 data
  5241.  3    inhibit power save when waiting for data from barcode wand
  5242.  4    inhibit power up on timer tick
  5243. --------b-1579------------------------------------
  5244. INT 15 - HUNTER 16 - REDIRECT LPT1
  5245.     AH = 79h
  5246.     AL = port to which to redirect (00h COM1, 01h COM2)
  5247. --------b-157A------------------------------------
  5248. INT 15 - HUNTER 16 - INVOKE HOT KEY
  5249.     AH = 7Ah
  5250. Desc:    this function has the same effect as pressing the HOT key
  5251. SeeAlso: AH=7Bh
  5252. --------b-157B------------------------------------
  5253. INT 15 - HUNTER 16 - CONTROL HOT KEY
  5254.     AH = 7Bh
  5255.     AL = 00h prevent HOT key
  5256.         else allow HOT key
  5257. Desc:    Allow or prevent the HOT key function which is used to examine and
  5258.       change the Hunter setup
  5259. SeeAlso: AH=71h,AH=7Ah,AH=7Ch
  5260. --------b-157C------------------------------------
  5261. INT 15 - HUNTER 16 - CONTROL HOT KEY POWER OPTION
  5262.     AH = 7Ch
  5263.     AL = 00h prevent HOT key power option
  5264.         else allow HOT key power option
  5265. Desc:    allow or prevent changing the power options
  5266. SeeAlso: AH=7Bh,AH=7Dh
  5267. --------b-157D------------------------------------
  5268. INT 15 - HUNTER 16 - OVERRIDE LOW POWER TURN OFF
  5269.     AH = 7Dh
  5270.     AL = 00h turn off after 10 warnings
  5271.         else never turn off
  5272. Desc:    specify whether the Hunter 16 turns off after 10 low power warnings
  5273. SeeAlso: AH=7Ch
  5274. --------b-157E------------------------------------
  5275. INT 15 - HUNTER 16 - CONTROL BATTERY CHANGE FACILITIES (APM)
  5276.     AH = 7Eh
  5277.     AL = 00h do not prompt
  5278.         else prompt
  5279. Desc:    select whether the user is prompted for the battery state if the
  5280.       battery cap has been off when the system is turned on
  5281. SeeAlso: AH=7Fh
  5282. --------b-157F------------------------------------
  5283. INT 15 - HUNTER 16 - SET BATTERY TYPE (APM)
  5284.     AH = 7Fh
  5285.     AL = battery type
  5286.         00h     non-rechargeable
  5287.         else rechargeable
  5288. SeeAlso: AH=7Eh
  5289. --------B-1580-------------------------------
  5290. INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
  5291.     AH = 80h
  5292.     BX = device ID
  5293.     CX = process ID
  5294.     CF clear
  5295. Return: CF clear if successful
  5296.         AH = 00h
  5297.     CF set on error
  5298.         AH = status (see #00496)
  5299. Note:    this function should be hooked by a multitasker which wishes to keep
  5300.       track of device ownership; the default BIOS handler merely returns
  5301.       successfully
  5302. SeeAlso: AH=81h,AH=82h
  5303.  
  5304. (Table 00496)
  5305. Values for status:
  5306.  80h    invalid command (PC,PCjr)
  5307.  86h    function not supported (XT)
  5308. --------b-1580------------------------------------
  5309. INT 15 - HUNTER 16 - GET/SET BATTERY CAPACITY (APM)
  5310.     AH = 80h
  5311.     AL = function
  5312.         00h get
  5313.         Return: AL = capacity (500mA + AL * 50mA, max 40 = 2500mA)
  5314.         else set
  5315.         BL = battery capacity (same as AL above)
  5316. SeeAlso: AH=61h"HUNTER",AH=81h"HUNTER"
  5317. --------B-1581-------------------------------
  5318. INT 15 C - OS HOOK - DEVICE CLOSE
  5319.     AH = 81h
  5320.     BX = device ID
  5321.     CX = process ID
  5322.     CF clear
  5323. Return: CF clear if successful
  5324.         AH = 00h
  5325.     CF set on error
  5326.         AH = status (see #00496)
  5327. Note:    this function should be hooked by a multitasker which wishes to keep
  5328.       track of device ownership; the default BIOS handler merely returns
  5329.       successfully
  5330. SeeAlso: AH=80h,AH=82h
  5331. --------b-1581------------------------------------
  5332. INT 15 - HUNTER 16 - CONTROL POWER OUTPUT
  5333.     AH = 81h
  5334.     AL = new state of power output (00h off, nonzero on)
  5335. Desc:    turn the +5V low power output on or off
  5336. SeeAlso: AH=80h"HUNTER"
  5337. --------B-1582-------------------------------
  5338. INT 15 C - OS HOOK - PROGRAM TERMINATION
  5339.     AH = 82h
  5340.     BX = process ID
  5341.     CF clear
  5342. Return: CF clear if successful
  5343.         AH = 00h
  5344.     CF set on error
  5345.         AH = status (see #00496)
  5346. Notes:    closes all devices opened by the given process ID with function 80h
  5347.     this function should be hooked by a multitasker which wishes to keep
  5348.       track of device ownership; the default BIOS handler merely returns
  5349.       successfully
  5350. SeeAlso: AH=80h,AH=81h
  5351. --------b-1582------------------------------------
  5352. INT 15 - HUNTER 16 - SOUND OUTPUT
  5353.     AH = 82h
  5354.     DX = length (duration in seconds = DX * 666670 / frequency)
  5355.     BX = pitch (see #00497)
  5356. Desc:    Sound the tone specified in BX for the duration in DX
  5357. SeeAlso: AX=1019h
  5358.  
  5359. (Table 00497)
  5360. Values for HUNTER 16 sound pitch:
  5361. BX(dec)     Note    Frequency    BX(dec)     Note    Frequency
  5362.   425    G    1568.000     1515    A     440.000
  5363.   451    F#    1479.503     1605    G#     415.307
  5364.   477    F    1396.900     1701    G     392.000
  5365.   506    E    1318.500     1802    F#     369.998
  5366.   536    D#    1244.523     1909    F     349.230
  5367.   568    D    1174.700     2022    E     329.630
  5368.   601    C#    1108.749     2143    D#     311.127
  5369.   637    C    1046.500     2270    D     293.660
  5370.   675    B     958.770     2405    C#     277.183
  5371.   715    A#     932.329     2548    MID C     261.630
  5372.   758    A     880.000     2700    B     246.940
  5373.   803    G#     830.609     2860    A#     233.081
  5374.   850    G     783.990     3030    A     220.000
  5375.   901    F#     739.990     3210    G#     207.654
  5376.   954    F     698.460     3401    G     196.000
  5377.  1011    E     659.260     3604    F#     184.996
  5378.  1071    D#     622.257     3818    F     174.610
  5379.  1135    D     587.330     4045    E     164.810
  5380.  1203    C#     554.365     4286    D#     155.560
  5381.  1274    C     523.250     4540    D     146.830
  5382.  1350    B     493.880     4668    C#     142.827
  5383.  1430    A#     466.162     4803    C     138.810
  5384. --------B-1583-------------------------------
  5385. INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
  5386.     AH = 83h
  5387.     AL = subfunction
  5388.         00h set interval
  5389.         CX:DX = microseconds to delay
  5390.         ES:BX -> byte whose high bit is to be set at end of interval
  5391.         01h cancel wait interval
  5392. Return: CF set on error or function already busy
  5393.         AH = status
  5394.         80h invalid command (PC,PCjr)
  5395.         86h function not supported (XT and later)
  5396.     CF clear if successful
  5397. Notes:    the resolution of the wait period is 977 microseconds on many systems
  5398.       because many BIOSes use the 1/1024 second fast interrupt from the AT
  5399.       real-time clock chip which is available on INT 70
  5400.     IBM AT 1/10/84 BIOS ignores AL and always performs subfunction 00h
  5401. SeeAlso: AH=41h,AH=86h,INT 70,MEM 0040h:0098h,MEM 0040h:009Ch
  5402. --------b-1583------------------------------------
  5403. INT 15 - HUNTER 16 - CONTROL SCREEN SYNCHRONISATION
  5404.     AH = 83h
  5405.     AL = state of LCD window (00h disabled, nonzero enabled)
  5406. Desc:    Enable/disable the facility where the displayed window tracks the
  5407.       cursor output to keep the focus visible
  5408. --------B-1584-------------------------------
  5409. INT 15 - BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS)
  5410.     AH = 84h
  5411.     DX = subfunction
  5412.         0000h read joystick switches
  5413.         Return: AL bits 7-4 = switch settings
  5414.         0001h read positions of joysticks
  5415.         Return: AX = X position of joystick A
  5416.             BX = Y position of joystick A
  5417.             CX = X position of joystick B
  5418.             DX = Y position of joystick B
  5419. Return: CF set on error
  5420.         AH = status (see #00496)
  5421.     CF clear if successful
  5422. Notes:    if no game port is installed, subfunction 0000h returns AL=00h (all
  5423.       switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h
  5424.     a 250kOhm joystick typically returns 0000h-01A0h
  5425. SeeAlso: AH=84h"V20-XT-BIOS"
  5426. --------b-1584-------------------------------
  5427. INT 15 - V20-XT-BIOS - JOYSTICK SUPPORT
  5428.     AH = 84h
  5429.     DX = subfunction
  5430.         0000h read joystick switches
  5431.         Return: AL bits 7-4 = switch settings
  5432.         other: read positions of joysticks as indicated by bits 0-3
  5433.         Return: AX = X position of joystick A (if DX bit 0 set)
  5434.             BX = Y position of joystick A (if DX bit 1 set)
  5435.             CX = X position of joystick B (if DX bit 2 set)
  5436.             DX = Y position of joystick B (if DX bit 3 set)
  5437. Return: CF set on error
  5438.         AH = status (see #00496)
  5439.     CF clear if successful
  5440. Program: V20-XT-BIOS is a ROM BIOS replacement with extensions by Peter
  5441.        Koehlmann / c't magazine
  5442. SeeAlso: AH=84h"PS",INT 10/AH=0Eh/CX=ABCDh
  5443. --------b-158400----------------------------------
  5444. INT 15 - HUNTER 16 - GET DISKETTE PORT
  5445.     AX = 8400h
  5446.     BH = Drive (0: A:, 1: B:)
  5447. Return: AL = Port (0: COM1, >0: COM2)
  5448. Desc:    return the COM port used for the floppy drive
  5449. SeeAlso: AX=8401h
  5450. --------b-158401----------------------------------
  5451. INT 15 - HUNTER 16 - SET DISKETTE PORT
  5452.     AX = 8401h
  5453.     BH = Drive (0: A:, 1: B:)
  5454.     BL = Port (0: COM1, >0: COM2)
  5455. Desc:    set the COM port used for the floppy drive
  5456. SeeAlso: AX=8400h
  5457. --------B-1585-------------------------------
  5458. INT 15 C - OS HOOK - SysReq KEY ACTIVITY (AT,PS)
  5459.     AH = 85h
  5460.     AL = SysReq key action (00h pressed, 01h released)
  5461.     CF clear
  5462. Return: CF clear if successful
  5463.         AH = 00h
  5464.     CF set on error
  5465.         AH = status (see #00496)
  5466. Notes:    called by keyboard decode routine
  5467.     the default handler simply returns successfully; programs which wish
  5468.       to monitor the SysReq key must hook this call
  5469.     the SysReq key is often labeled SysRq
  5470. SeeAlso: INT 09
  5471. --------b-158500----------------------------------
  5472. INT 15 - HUNTER 16 - RESTORE POWER MENU (APM)
  5473.     AX = 8500h
  5474. Desc:    restore the standard power menu
  5475. SeeAlso: AX=8501h"HUNTER"
  5476. --------b-158501----------------------------------
  5477. INT 15 - HUNTER 16 - SET POWER MENU (APM)
  5478.     AX = 8501h
  5479.     BL = user software interrupt number
  5480. Desc:    install an alternate power menu routine
  5481. SeeAlso: AX=8500h"HUNTER"
  5482. --------B-1586-------------------------------
  5483. INT 15 - BIOS - WAIT (AT,PS)
  5484.     AH = 86h
  5485.     CX:DX = interval in microseconds
  5486. Return: CF clear if successful (wait interval elapsed)
  5487.     CF set on error or AH=83h wait already in progress
  5488.         AH = status (see #00496)
  5489. Note:    the resolution of the wait period is 977 microseconds on many systems
  5490.       because many BIOSes use the 1/1024 second fast interrupt from the AT
  5491.       real-time clock chip which is available on INT 70; because newer
  5492.       BIOSes may have much more precise timers available, it is not
  5493.       possible to use this function accurately for very short delays unless
  5494.       the precise behavior of the BIOS is known (or found through testing)
  5495. SeeAlso: AH=41h,AH=83h,INT 1A/AX=FF01h,INT 70
  5496. --------b-1586------------------------------------
  5497. INT 15 - HUNTER 16 - GET/SET SCREEN ATTRIBUTE TABLE
  5498.     AH = 86h
  5499.     AL = function (00h get, nonzero set)
  5500.     BX = 1234h
  5501.     DS:SI -> 256-byte Attribute buffer
  5502. Note:    In text modes each character has its attribute byte XOR'd with the
  5503.       corresponding byte in the attribute table.  If the attribute is 15,
  5504.       15 is XOR'd with Table[15]
  5505. --------B-1587-------------------------------
  5506. INT 15 - SYSTEM - COPY EXTENDED MEMORY
  5507.     AH = 87h
  5508.     CX = number of words to copy (max 8000h)
  5509.     ES:SI -> global descriptor table (see #00499)
  5510. Return: CF set on error
  5511.     CF clear if successful
  5512.     AH = status (see #00498)
  5513. Notes:    copy is done in protected mode with interrupts disabled by the default
  5514.       BIOS handler; many 386 memory managers perform the copy with
  5515.       interrupts enabled
  5516.     this function is incompatible with the OS/2 compatibility box
  5517. SeeAlso: AH=88h,AH=89h,INT 1F/AH=90h
  5518.  
  5519. (Table 00498)
  5520. Values for extended-memory copy status:
  5521.  00h    source copied into destination
  5522.  01h    parity error
  5523.  02h    interrupt error
  5524.  03h    address line 20 gating failed
  5525.  80h    invalid command (PC,PCjr)
  5526.  86h    unsupported function (XT,PS30)
  5527.  
  5528. Format of global descriptor table:
  5529. Offset    Size    Description    (Table 00499)
  5530.  00h 16 BYTEs    zeros (used by BIOS)
  5531.  10h    WORD    source segment length in bytes (2*CX-1 or greater)
  5532.  12h  3 BYTEs    24-bit linear source address, low byte first
  5533.  15h    BYTE    source segment access rights (93h)
  5534.  16h    WORD    (286) zero
  5535.         (386+) extended access rights and high byte of source address
  5536.  18h    WORD    destination segment length in bytes (2*CX-1 or greater)
  5537.  1Ah  3 BYTEs    24-bit linear destination address, low byte first
  5538.  1Dh    BYTE    destination segment access rights (93h)
  5539.  1Eh    WORD    (286) zero
  5540.         (386+) extended access rights and high byte of destin. address
  5541.  20h 16 BYTEs    zeros (used by BIOS to build CS and SS descriptors)
  5542. --------b-1587------------------------------------
  5543. INT 15 - HUNTER 16 - SET INT 72h VECTOR
  5544.     AH = 87h
  5545.     DS:DX = new service routine
  5546. Desc:    set the INT 72h vector which is called in 2 cases:
  5547.       - when the machine is about to turn off or reboot, INT 72h is called
  5548.         with AH=0
  5549.       - when the machine is powering up INT 72h is called with AH=01h
  5550. Note:    the actual INT 72h vector must also be changed with INT 21/AH=25h
  5551. --------B-1588-------------------------------
  5552. INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
  5553.     AH = 88h
  5554. Return: CF clear if successful
  5555.         AX = number of contiguous KB starting at absolute address 100000h
  5556.     CF set on error
  5557.         AH = status
  5558.         80h invalid command (PC,PCjr)
  5559.         86h unsupported function (XT,PS30)
  5560. Notes:    TSRs which wish to allocate extended memory to themselves often hook
  5561.       this call, and return a reduced memory size.    They are then free to
  5562.       use the memory between the new and old sizes at will.
  5563.     the standard BIOS only returns memory between 1MB and 16MB; use AH=C7h
  5564.       for memory beyond 16MB
  5565.     not all BIOSes correctly return the carry flag, making this call
  5566.       unreliable unless one first checks whether it is supported through
  5567.       a mechanism other than calling the function and testing CF
  5568. SeeAlso: AH=87h,AH=8Ah"Phoenix",AH=C7h,AX=DA88h,AX=E801h,AX=E820h
  5569. --------b-1588------------------------------------
  5570. INT 15 - HUNTER 16 - GET POWER UP KEYS
  5571.     AH = 88h
  5572. Return: AH = 00h
  5573.     BX = column
  5574.     CL = row
  5575. SeeAlso: AH=71h
  5576. --------B-1589-------------------------------
  5577. INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
  5578.     AH = 89h
  5579.     BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
  5580.     BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
  5581.     ES:SI -> GDT for protected mode (see #00500)
  5582. Return: CF set on error
  5583.        AH = FFh  error enabling address line 20
  5584.     CF clear if successful
  5585.        AH = 00h
  5586.        in protected mode at specified address
  5587.        BP may be destroyed; all segment registers change
  5588. Notes:    BL and BH must be multiples of 8
  5589.     the protected-mode CS must reference the same memory as the CS this
  5590.       function is called from because execution continues with the address
  5591.       following the interrupt call
  5592. SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch
  5593.  
  5594. Format of BIOS switch-to-protected-mode Global Descriptor Table:
  5595. Offset    Size    Description    (Table 00500)
  5596.  00h  8 BYTEs    null descriptor (initialize to zeros)
  5597.  08h  8 BYTEs    GDT descriptor (see #00501)
  5598.  10h  8 BYTEs    IDT descriptor
  5599.  18h  8 BYTEs    DS descriptor
  5600.  20h  8 BYTEs    ES
  5601.  28h  8 BYTEs    SS
  5602.  30h  8 BYTEs    CS
  5603.  38h  8 BYTEs    uninitialized, used to build descriptor for BIOS CS
  5604.  
  5605. Format of segment descriptor table entry:
  5606. Offset    Size    Description    (Table 00501)
  5607.  00h    WORD    segment limit, low word
  5608.  02h  3 BYTEs    segment base address, low 24 bits
  5609.  05h    BYTE    access mode (see #00502)
  5610.  06h    BYTE    386+ extended access mode (see #00505)
  5611.  07h    BYTE    386+ segment base address, high 8 bits
  5612. SeeAlso: #00500,INT 2C/AX=0002h,INT 31/AX=0009h
  5613.  
  5614. Bitfields for segment descriptor table access mode field:
  5615. Bit(s)    Description    (Table 00502)
  5616.  3-0    segment type (see #00503,#00504)
  5617.  4    descriptor type (1 = application, 0 = system)
  5618.  6-5    descriptor privilege level
  5619.  7    segment is present in RAM
  5620. SeeAlso: #00501,#00505
  5621.  
  5622. (Table 00503)
  5623. Values for system segment descriptor type:
  5624.  0    reserved
  5625.  1    available 16-bit TSS
  5626.  2    LDT
  5627.  3    busy 16-bit TSS
  5628.  4    16-bit call gate
  5629.  5    task gate
  5630.  6    16-bit interrupt gate
  5631.  7    16-bit trap gate
  5632.  8    reserved
  5633.  9    available 32-bit TSS
  5634.  10    reserved
  5635.  11    busy 32-bit TSS
  5636.  12    32-bit call gate
  5637.  13    reserved
  5638.  14    32-bit interrupt gate
  5639.  15    32-bit trap gate
  5640. SeeAlso: #00502,#00504
  5641.  
  5642. Bitfields for application segment descriptor type:
  5643. Bit(s)    Description    (Table 00504)
  5644.  3    code/data
  5645.     0 date
  5646.     1 code
  5647. ---data segments---
  5648.  2    expand down
  5649.  1    writeable
  5650. ---code segments---
  5651.  2    conforming
  5652.  1    readable
  5653. ------
  5654.  0    accessed
  5655. SeeAlso: #00502,#00503
  5656.  
  5657. Bitfields for 386+ segment descriptor table extended access mode field:
  5658. Bit(s)    Description    (Table 00505)
  5659.  3-0    high 4 bits of segment limit
  5660.  4    available
  5661.  5    reserved (0)
  5662.  6    default operation size (1 = 32 bits, 0 = 16 bits)
  5663.  7    granularity (1 = 4K, 0 = byte)
  5664. SeeAlso: #00501,#00502,#02557
  5665. --------b-158900----------------------------------
  5666. INT 15 - HUNTER 16 - GET POWER MODE
  5667.     AX = 8900h
  5668. Return: AH = 00h
  5669.     BL = current power mode
  5670.         00h Standard Power Mode (SPM)
  5671.         01h Advanced Power Mode (APM)
  5672. SeeAlso: AX=8901h
  5673. --------b-158901----------------------------------
  5674. INT 15 - HUNTER 16 - SET POWER MODE
  5675.     AX = 8901h
  5676.     BL = new mode
  5677.         00h Standard Power Mode (SPM)
  5678.         01h Advanced Power Mode (APM)
  5679. Return: AH = 00h
  5680. SeeAlso: AX=8900h
  5681. --------b-158A------------------------------------
  5682. INT 15 - HUNTER 16 - CONTROL POWER INPUT (SPM)
  5683.     AH = 8Ah
  5684.     AL = new state of Power Input (00h disabled, nonzero enabled)
  5685.     SI = 1234h
  5686.     DI = 5678h
  5687. Return: AH = status
  5688.         00h success
  5689.         FFh failure
  5690. Desc:    Enable or disable Power Input. When Power Input is disabled the AC
  5691.       adapter will neither charge the batteries nor supply power to the
  5692.       Hunter 16. Disable Power Input if using Alkaline batteries.
  5693. --------b-158A-------------------------------
  5694. INT 15 - Phoenix BIOS v4.0 - GET BIG MEMORY SIZE
  5695.     AH = 8Ah
  5696. Return: DX:AX = extended memory size in K
  5697. SeeAlso: AH=88h,AX=E801h,AX=E820h
  5698. --------b-158B------------------------------------
  5699. INT 15 - HUNTER 16 - GET/SET CHARGER TEMPERATURE OVERRIDE
  5700.     AH = 8Bh
  5701.     AL = function
  5702.         00h get
  5703.         Return:    BH = Maximum charging temperature
  5704.                 Temp = -20 + (n * 0.63) degrees Centigrade
  5705.             BL = Minimum charging temperature
  5706.         else set
  5707.         BH = maximum charging temperature (as above)
  5708.         BL = minimum charging temperature (as above)
  5709. Return: AH = status
  5710.         00h success
  5711.         FFh failure
  5712. Desc:    get/set the temperature interval within which the charger should
  5713.       operate
  5714. --------b-158C------------------------------------
  5715. INT 15 - HUNTER 16 - GET/SET POWER SAVE ENTRY FLAG
  5716.     AH = 8Ch
  5717.     AL = function
  5718.         00h get
  5719.         Return: BX = which operations disable power save (see #00506)
  5720.         else set
  5721.         BX = which operations should disable power save (see #00506)
  5722. SeeAlso: AH=8Dh
  5723.  
  5724. Bitfields for HUNTER 16 operations disabling power save:
  5725. Bit(s)    Description    (Table 00506)
  5726.  0    INT 10h prevents power save
  5727.  1    INT 13h prevents power save
  5728.  2    INT 14h prevents power save
  5729.  3    INT 15h prevents power save
  5730.  4    INT 1Ah prevents power save
  5731.  5    INT 21h prevents power save
  5732.  6    direct write to video RAM prevents power save
  5733.  7    access to 8250 UART prevents power save
  5734.  8    access to 8253 (Sound) prevents power save
  5735. --------b-158D------------------------------------
  5736. INT 15 - HUNTER 16 - GET/SET BOOST CHARGE (SPM)
  5737.     AH = 8Dh
  5738.     AL = function
  5739.         00h get
  5740.         Return: AL = Fast Charge state (00h prevented, else allowed)
  5741.         nonzero set
  5742.         BH = Fast Charge state (00h prevent, nonzero allow)
  5743. Return: AH = status
  5744.         00h success
  5745.         FFh failure
  5746. Desc:    control whether Fast Charging (200ma rather than 70ma) is allowed
  5747. SeeAlso: AH=8Ch
  5748. --------B-1590-------------------------------
  5749. INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
  5750.     AH = 90h
  5751.     AL = device type (see #00507)
  5752.     ES:BX -> request block for type codes 80h through BFh
  5753.     CF clear
  5754. Return: CF set if wait time satisfied
  5755.     CF clear if driver must perform wait
  5756.         AH = 00h
  5757. Notes:    type codes are allocated as follows:
  5758.       00-7F non-reentrant devices; OS must arbitrate access
  5759.       80-BF reentrant devices; ES:BX points to a unique control block
  5760.       C0-FF wait-only calls, no complementary INT 15/AH=91h call
  5761.     floppy and hard disk BIOS code uses this call to implement a timeout;
  5762.       for device types 00h and 01h, a return of CF set means that the
  5763.       timeout expired before the disk responded.
  5764.     this function should be hooked by a multitasker to allow other tasks
  5765.       to execute while the BIOS is waiting for I/O completion; the default
  5766.       handler merely returns with AH=00h and CF clear
  5767. SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h
  5768.  
  5769. (Table 00507)
  5770. Values for device type:
  5771.  00h    disk
  5772.  01h    diskette
  5773.  02h    keyboard
  5774.  03h    PS/2 pointing device
  5775.  21h    waiting for keyboard input (Phoenix BIOS)
  5776.  80h    network
  5777.  FBh    digital sound (Tandy)
  5778.  FCh    disk reset (PS)
  5779.  FDh    diskette motor start
  5780.  FEh    printer
  5781. --------B-1591-------------------------------
  5782. INT 15 - OS HOOK - DEVICE POST (AT,PS)
  5783.     AH = 91h
  5784.     AL = device type (see #00507)
  5785.     ES:BX -> request block for type codes 80h through BFh
  5786.     CF clear
  5787. Return: AH = 00h
  5788. Note:    this function should be hooked by a multitasker to allow other tasks
  5789.       to execute while the BIOS is waiting for I/O completion; the default
  5790.       handler merely returns with AH=00h and CF clear
  5791. SeeAlso: AH=90h
  5792. --------B-1592-------------------------------
  5793. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  5794.     AH = 92h
  5795. SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
  5796. --------B-15A0-------------------------------
  5797. INT 15 - IBM SurePath BIOS - ACCESS LOADABLE-ABIOS SIGNATURE
  5798.     AH = A0h
  5799.     AL = function
  5800.         00h get loadable-ABIOS signature
  5801.         Return: BL = signature value
  5802.                 00h loadable-ABIOS prompting not required
  5803.                 A1h loadable-ABIOS prompting is required
  5804.         01h write loadable-ABIOS signature
  5805.         BL = new signature value
  5806.             00h loadable-ABIOS prompting not required
  5807.             A1h loadable-ABIOS prompting is required
  5808. Return: CF clear if successful
  5809.     CF set on error
  5810.     AH = status
  5811.         00h successful
  5812.         01h invalid subfunction
  5813.         02h unable to read/write signature
  5814.         86h function not supported
  5815. Note:    IBM classifies this function as optional
  5816. SeeAlso: AH=08h"IBM"
  5817. --------x-15A100-----------------------------
  5818. INT 15 U - AMI PCI BIOS - SET ??? FLAG
  5819.     AX = A100h
  5820. Return: AX = 0000h
  5821.     CF clear
  5822.     BX,CX,DI may be destroyed
  5823. Desc:    sets bit 7 of CMOS RAM location 37h and updates the CMOS checksum in
  5824.       locations 3Eh and 3Fh
  5825. Notes:    in the examined version of the BIOS, nonzero values in AL cause it to
  5826.       drop through to checking the next possible value of AH, i.e. only
  5827.       subfunction 00h is supported
  5828.     also supported by Dell XPS P90 and IBM PS/PV 6384, which also use
  5829.       AMI BIOSes
  5830. --------B-15AB-------------------------------
  5831. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  5832.     AH = ABh
  5833. SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
  5834. ----------15B001CX5354-----------------------
  5835. INT 15 - Stac ??? - INSTALLATION CHECK
  5836.     AX = B001h
  5837.     CX = 5354h ('ST')
  5838.     DX = 4143h ('AC')
  5839. Return: AX = 4F4Bh ('OK') if installed
  5840. Note:    this function is called by Novell DOS 7 NWCACHE v1.01
  5841. --------n-15BA10-----------------------------
  5842. INT 15 - HP OmniShare - Pen Driver - REPORT PEN CONTROL AREA EVENT
  5843.     AX = BA10h
  5844.     BL = event
  5845.        00h the pen left control areas
  5846.        01h the pen entered the Brightness- area
  5847.        02h the pen entered the Brightness+ area
  5848.        03h the pen entered the Contrast- area
  5849.        04h the pen entered the Contrast+ area
  5850. Return: CF clear if successfully processed
  5851.     CF set on error (function not supported, ie. not an OmniShare BIOS)
  5852. Note:    The pen driver is responsible for detecting when the pen enters and
  5853.       leaves control areas of the OmniShare tablet, and notifying the BIOS.
  5854.     The BIOS manages the events, including the autorepetition, and sets
  5855.       the status LEDs.
  5856. SeeAlso: AX=BA20h,AX=BA13h
  5857. --------n-15BA11-----------------------------
  5858. INT 15 - HP OmniShare - Pen Driver - SET THE COMMUNICATION LED STATE
  5859.     AX = BA11h
  5860.     BL = new LED state (00h steady, 01h flashing)
  5861. Return: CF clear if successful
  5862.     CF set on error
  5863. Note:    this function is for use by communication software to give visual
  5864.       feedback of active communications even if the display is in standby
  5865.       mode.
  5866. SeeAlso: AX=BA10h,AX=BA24h
  5867. --------n-15BA12-----------------------------
  5868. INT 15 - HP OmniShare - Pen Driver - STORE PEN BATTERY CHARGE
  5869.     AX = BA12h
  5870.     BL = new battery state (00h good, 01h low charge)
  5871. Return: CF set on error
  5872.     CF clear if successfully stored in CMOS
  5873. Note:    The last report will be displayed by the Power-On Self Test the next
  5874.       time the OmniShare boots.  This allows something meaningful to be
  5875.       reported even if the pen is not detected during the POST.
  5876. SeeAlso: AX=BA13h
  5877. --------n-15BA13-----------------------------
  5878. INT 15 - HP OmniShare - Pen Driver - GET PEN BATTERY CHARGE
  5879.     AX = BA13h
  5880. Return: CF clear if successful
  5881.         BL = pen battery state (00h good, 01h low charge)
  5882.     CF set on error
  5883. Note:    returns the last value set by AX=BA12h.
  5884. SeeAlso: AX=BA12h
  5885. --------p-15BA20-----------------------------
  5886. INT 15 - HP OmniShare - STANDBY.COM - INSTALLATION CHECK
  5887.     AX = BA20h
  5888. Return: CF clear if successful (installed)
  5889.     CF set on error (not installed)
  5890. Notes:    The display controller can enter a standby mode after a given timeout,
  5891.       to conserve power or (for the OmniShare) to increase the life of
  5892.       the backlight.
  5893.     A side effect of standby mode is that the communications LED turns on
  5894.       automatically when the display is in standby mode.  This is done in
  5895.       hardware, and is intended to show that the unit is still on.
  5896. SeeAlso: AX=BA10h,AX=BA20h,AX=BA22h,AX=BA24h,AX=BA26h
  5897. --------p-15BA21-----------------------------
  5898. INT 15 - HP OmniShare - STANDBY.COM - SET STANDBY DURATION
  5899.     AX = BA21h
  5900.     BL = new timeout before standby mode in minutes (01h-0Fh)
  5901.         00h to disable automatic switch to standby mode
  5902. Return: CF clear if successful
  5903.     CF set on error (function not supported)
  5904. Note:    The actual timeout with a GD6205 controller is ((N*64)-32) seconds,
  5905.       instead of (N*60) seconds as documented.
  5906. SeeAlso: AX=BA20h,AX=BA22h
  5907. --------p-15BA22-----------------------------
  5908. INT 15 - HP OmniShare - STANDBY.COM - GET STANDBY DURATION
  5909.     AX = BA22h
  5910. Return: CF clear if successful
  5911.        BL = standy duration in minutes (01h-0Fh), or 00h if disabled
  5912.     CF set on error (function not supported)
  5913. Note:    The actual timeout with a GD6205 controller is ((N*64)-32) seconds,
  5914.       instead of (N*60) seconds as documented.
  5915. SeeAlso: AX=BA20h,AX=BA21h
  5916. --------p-15BA23-----------------------------
  5917. INT 15 - HP OmniShare - STANDBY.COM - TURN ON THE SCREEN IMMEDIATELY
  5918.     AX = BA23h
  5919. Return: CF clear if successful
  5920.     CF set on error
  5921. SeeAlso: AX=BA11h,AX=BA20h,AX=BA24h
  5922. --------p-15BA24-----------------------------
  5923. INT 15 - HP OmniShare - STANDBY.COM - TURN OFF THE SCREEN IMMEDIATELY
  5924.     AX = BA24h
  5925. Return: CF clear if successful
  5926.     CF set on error
  5927. Note:    This function is not implemented yet. Reserved for future versions
  5928.       of the OmniShare.
  5929. SeeAlso: AX=BA11h,AX=BA20h,AX=BA23h
  5930. --------p-15BA25-----------------------------
  5931. INT 15 - HP OmniShare - STANDBY.COM - PREPARE FOR UNINSTALL
  5932.     AX = BA25h
  5933. Return: CF clear if successful
  5934.         AX = 25BAh
  5935.         BX = PSP of STANDBY.COM resident portion
  5936.         DX:CX -> previous INT 15 handler
  5937.     CF set on error
  5938. Note:    This function is used internally by the STANDBY.COM /u option, and
  5939.       should not be used by application programs.
  5940. SeeAlso: AX=BA20h
  5941. --------p-15BA26-----------------------------
  5942. INT 15 - HP OmniShare - STANDBY.COM - IS THE DISPLAY IN STANDBY MODE?
  5943.     AX = BA26h
  5944. Return: CF clear if successful
  5945.         AL    = display state (00h active, 01h in standby mode)
  5946.     CF set on error (function not supported)
  5947. SeeAlso: AX=BA20h,AX=BA23h
  5948. --------p-15BA27-----------------------------
  5949. INT 15 - HP OmniShare - STANDBY.COM - RESERVED FUNCTIONS
  5950.     AX = BA27h to BA2Fh
  5951. Desc:    reserved for future use
  5952. --------b-15BC-------------------------------
  5953. INT 15 - Phoenix 386 BIOS - DETERMINE CPU SPEED FOR DELAY LOOPS
  5954.     AH = BCh
  5955. Return: CF clear
  5956.     (Phoenix 1.10 10a) BYTE 0040h:00B0h set to delay loop count
  5957.     (Dell 4xxDE BIOS A11) WORD 0040h:00ECh set to delay loop count
  5958. Note:    this function reads system timer channel 0 twice, then does
  5959.       calculations on the returned values to determine the delay loop
  5960.       counter needed by the BIOS for beeps and floppy timeouts
  5961. SeeAlso: AX=2305h,MEM 0040h:00B0h
  5962. --------E-15BF00-----------------------------
  5963. INT 15 - Rational Systems DOS/16M - ???
  5964.     AX = BF00h
  5965.     ???
  5966. Return: ???
  5967. Note:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  5968. SeeAlso: AX=BF02h
  5969. --------E-15BF01-----------------------------
  5970. INT 15 - Rational Systems DOS/16M - ???
  5971.     AX = BF01h
  5972.     ???
  5973. Return: ???
  5974. Notes:    under DESQview/X 1.02 DVDOS4GX.DVR, this call is identical to AX=BF02h
  5975.     called by DOS/4GW
  5976. SeeAlso: AX=BF00h,AX=BF02h
  5977. --------E-15BF02DX0000-----------------------
  5978. INT 15 - Rational Systems DOS/16M - INSTALLATION CHECK
  5979.     AX = BF02h
  5980.     DX = 0000h
  5981. Return: DX = nonzero if installed
  5982.         DX:SI -> XBRK structure (see #00508)
  5983. Note:    this function is also supported by DOS/4G
  5984. SeeAlso: AX=BF01h,AX=BFDCh,AX=BFDEh/BX=0000h
  5985. SeeAlso: INT 21/AH=FFh/DH=0Eh,INT 2F/AH=A1h,INT 2F/AX=F100h,INT 2F/AX=FBA1h
  5986.  
  5987. Format of DOS/16M XBRK structure:
  5988. Offset    Size    Description    (Table 00508)
  5989.  00h    DWORD    linear address of first available byte
  5990.  04h    DWORD    linear address of last available byte + 1 ???
  5991.  08h    DWORD    real-mode address of XBRK structure???
  5992.  0Ch    DWORD    ???
  5993.  10h  2 BYTEs    ???
  5994.  12h    WORD    segment of ???
  5995.  14h  8 BYTEs    ???
  5996.  1Ch 512 BYTEs    protected-mode IDT
  5997. 21Ch  N BYTEs    protected-mode GDT
  5998. --------E-15BF03-----------------------------
  5999. INT 15 - Rational Systems DOS/4GW - UNINSTALL???
  6000.     AX = BF03h
  6001.     BX = PSP segment of extender
  6002.     ???
  6003. Return: ???
  6004. Note:    if BX is not the PSP segment of the extender, it passes the call down
  6005.       the INT 15 chain; this allows nested instances of the extender
  6006. SeeAlso: AX=BF06h
  6007. --------E-15BF04-----------------------------
  6008. INT 15 - Rational Systems DOS/4GW - ???
  6009.     AX = BF04h
  6010.     BX = PSP segment of extender
  6011. Return: nothing???
  6012. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  6013.       the INT 15 chain; this allows nested instances of the extender
  6014.     grabs INT 2Fh and installs handlers for INT 2F/AX=1605h-1607h
  6015. SeeAlso: INT 2F/AX=1607h/BX=22C0h
  6016. --------E-15BF05-----------------------------
  6017. INT 15 - Rational Systems DOS/4GW - INITIALIZE PROTECTED-MODE INTERFACE
  6018.     AX = BF05h
  6019.     BX = PSP segment of extender
  6020. Return: nothing???
  6021. Notes:    if BX is not the PSP segment of the extender, it passes the call down
  6022.       the INT 15 chain; this allows nested instances of the extender
  6023.     calls INT 67/AX=DE01h if ???
  6024. --------E-15BF06-----------------------------
  6025. INT 15 - Rational Systems DOS/4GW - ???
  6026.     AX = BF06h
  6027.     BX = PSP segment of extender
  6028.     ???
  6029. Return: ???
  6030. Note:    if BX is not the PSP segment of the extender, it passes the call down
  6031.       the INT 15 chain; this allows nested instances of the extender
  6032. SeeAlso: AX=BF03h
  6033. --------E-15BFDCDX0000-----------------------
  6034. INT 15 - Rational Systems DOS/4GW - INSTALLATION CHECK
  6035.     AX = BFDCh
  6036.     DX = 0000h
  6037.     SI = 0000h
  6038. Return: DX = nonzero if installed
  6039.         DX:SI -> XBRK structure (see #00508)
  6040. SeeAlso: AX=BF02h
  6041. --------E-15BFDEBX0000-----------------------
  6042. INT 15 - DESQview/X - DVDOS4GX.DVR - INSTALLATION CHECK
  6043.     AX = BFDEh
  6044.     BX = 0000h
  6045. Return: AX = ??? (0003h)
  6046.     BX = FFFFh
  6047. SeeAlso: AX=BF02h
  6048. --------E-15BFDEBX0001-----------------------
  6049. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROCESS MANAGER NAME
  6050.     AX = BFDEh
  6051.     BX = 0001h
  6052. Return: BX = 0000h (success)
  6053.     CX:DX -> name of process manager executable
  6054. SeeAlso: AX=BFDEh/BX=0000h
  6055. --------E-15BFDEBX0002-----------------------
  6056. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  6057.     AX = BFDEh
  6058.     BX = 0002h
  6059.     CX:DX -> ???
  6060. Return: BX = 0000h (success)
  6061. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0003h
  6062. --------E-15BFDEBX0003-----------------------
  6063. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6064.     AX = BFDEh
  6065.     BX = 0003h
  6066. Return: BX = 0000h (success)
  6067.     CX:DX -> ???
  6068. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0002h
  6069. --------E-15BFDEBX0004-----------------------
  6070. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6071.     AX = BFDEh
  6072.     BX = 0004h
  6073.     CL = ???
  6074. Return: BX = 0000h (success)
  6075.     CX:DX -> XBRK structure (see #00508)
  6076. SeeAlso: AX=BFDEh/BX=0000h
  6077. --------E-15BFDEBX0005-----------------------
  6078. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6079.     AX = BFDEh
  6080.     BX = 0005h
  6081.     CX = new value for ???
  6082. Return: BX = 0000h (success)
  6083.     AX = old value of ???
  6084.     DS:SI -> ??? (if AX nonzero on return)
  6085.     ES:DI -> ??? (if AX zero on return)
  6086. Note:    called by DOS4GW.EXE
  6087. SeeAlso: AX=BFDEh/BX=0000h
  6088. --------E-15BFDEBX0006-----------------------
  6089. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6090.     AX = BFDEh
  6091.     BX = 0006h
  6092. Return: BX = 0000h (success)
  6093.     AH = interrupt number??? (BEh)
  6094.     CX:DX = ???
  6095. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0007h,INT BE"DESQview"
  6096. --------E-15BFDEBX0007-----------------------
  6097. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  6098.     AX = BFDEh
  6099.     BX = 0007h
  6100.     CX:DX = ???
  6101. Return: BX = 0000h (success)
  6102. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=0006h
  6103. --------E-15BFDEBX0008-----------------------
  6104. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6105.     AX = BFDEh
  6106.     BX = 0008h
  6107.     CX = segment of ???
  6108.     DS = ???
  6109. Return: BX = status
  6110.         0000h successful
  6111.         AL = ??? (80h or C0h)
  6112.         DX = ??? (0603h) if AL=C0h
  6113.         0001h failed
  6114.         AX = 0000h
  6115. Note:    called by DOS4GW.EXE
  6116. SeeAlso: AX=BFDEh/BX=0000h
  6117. --------E-15BFDEBX0009-----------------------
  6118. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET PROTECTED MODE PROGRAM LOADER
  6119.     AX = BFDEh
  6120.     BX = 0009h
  6121. Return: BX = 0000h (success)
  6122.     CX:DX -> full pathname to LOAD32.EXP
  6123. SeeAlso: AX=BFDEh/BX=0000h
  6124. --------E-15BFDEBX000A-----------------------
  6125. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - DECREMENT ???
  6126.     AX = BFDEh
  6127.     BX = 000Ah
  6128. Return: BX = 0000h (success)
  6129.     AX = new value of ??? counter
  6130. Notes:    also resets a variety of values if the counter goes negative
  6131.     called by DOS4GW.EXE
  6132. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Bh
  6133. --------E-15BFDEBX000B-----------------------
  6134. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - INCREMENT ???
  6135.     AX = BFDEh
  6136.     BX = 000Bh
  6137. Return: AX = new value of ??? counter
  6138. Note:    called by DOS4GW.EXE
  6139. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Ah
  6140. --------E-15BFDEBX000C-----------------------
  6141. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6142.     AX = BFDEh
  6143.     BX = 000Ch
  6144.     CL = ???
  6145.         00h
  6146.         nonzero
  6147. Return: ???
  6148. SeeAlso: AX=BFDEh/BX=0000h
  6149. --------E-15BFDEBX000D-----------------------
  6150. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6151.     AX = BFDEh
  6152.     BX = 000Dh
  6153.     ???
  6154. Return: ???
  6155. SeeAlso: AX=BFDEh/BX=0000h
  6156. --------E-15BFDEBX000E-----------------------
  6157. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6158.     AX = BFDEh
  6159.     BX = 000Eh
  6160.     DX:CX -> ???
  6161. Return: AX = segment of handle for calling task
  6162.     BX = ??? (probably destroyed)
  6163.     DX:CX -> ???
  6164. SeeAlso: AX=BFDEh/BX=0000h,AX=BFDEh/BX=000Fh,AX=BFDEh/BX=0013h
  6165. --------E-15BFDEBX000F-----------------------
  6166. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - ???
  6167.     AX = BFDEh
  6168.     BX = 000Fh
  6169. Return: AX = segment of handle for calling task
  6170.     BX = ??? (probably destroyed)
  6171.     DX:CX -> ???
  6172. Note:    identical to AX=BFDEh/BX=000Eh with CX:DX = 0000h:0000h
  6173. SeeAlso: AX=BFDEh/BX=000Eh,AX=BFDEh/BX=0010h
  6174. --------E-15BFDEBX0010-----------------------
  6175. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET TASK HANDLE
  6176.     AX = BFDEh
  6177.     BX = 0010h
  6178. Return: AX = segment of caller's task handle
  6179.     BX destroyed
  6180. SeeAlso: AX=BFDEh/BX=000Fh
  6181. --------E-15BFDEBX0011-----------------------
  6182. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6183.     AX = BFDEh
  6184.     BX = 0011h
  6185. Return: CX = code segment of DVDOS4GX.DVR
  6186.     BX = ??? (0004h)
  6187. SeeAlso: AX=BFDEh/BX=0000h
  6188. --------E-15BFDEBX0012-----------------------
  6189. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6190.     AX = BFDEh
  6191.     BX = 0012h
  6192. Return: DX = code segment of DVDOS4GX.DVR
  6193.     BX = ??? (012Ch)
  6194.     CX = ??? (0006h)
  6195. SeeAlso: AX=BFDEh/BX=0000h
  6196. --------E-15BFDEBX0013-----------------------
  6197. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6198.     AX = BFDEh
  6199.     BX = 0013h
  6200. Return: DX:CX -> ???
  6201. SeeAlso: AX=BFDEh/BX=000Eh
  6202. --------E-15BFDEBX0014-----------------------
  6203. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - LOCK ??? MAILBOX
  6204.     AX = BFDEh
  6205.     BX = 0014h
  6206.     CX = index of ??? mailbox
  6207.         (0000h-0004h valid, but no range checking done)
  6208. Return: AX,BX destroyed
  6209. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  6210. --------E-15BFDEBX0015-----------------------
  6211. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - UNLOCK ??? MAILBOX
  6212.     AX = BFDEh
  6213.     BX = 0015h
  6214.     CX = index of ??? mailbox
  6215.         (0000h-0004h valid, but no range checking done)
  6216. Return: AX,BX destroyed
  6217. SeeAlso: AX=BFDEh/BX=0014h,AX=BFDEh/BX=0016h
  6218. --------E-15BFDEBX0016-----------------------
  6219. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - CHECK IF ??? MAILBOX OWNED
  6220.     AX = BFDEh
  6221.     BX = 0016h
  6222.     CX = index of ??? mailbox
  6223.         (0000h-0004h valid, but no range checking done)
  6224. Return: AX = status
  6225.         0000h no one owns mailbox
  6226.         0001h mailbox has an owner
  6227.     BX destroyed
  6228. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0017h
  6229. --------E-15BFDEBX0017-----------------------
  6230. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ??? MAILBOX OWNER
  6231.     AX = BFDEh
  6232.     BX = 0017h
  6233.     CX = index of ??? mailbox
  6234.         (0000h-0004h valid, but no range checking done)
  6235. Return: AX = segment of mailbox owner's handle
  6236.     BX = segment of caller's task handle
  6237. SeeAlso: AX=BFDEh/BX=0015h,AX=BFDEh/BX=0016h
  6238. --------E-15BFDEBXFFFD-----------------------
  6239. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - GET ???
  6240.     AX = BFDEh
  6241.     BX = FFFDh
  6242. Return: CX:DX = ???
  6243. SeeAlso: AX=BFDEh/BX=FFFEh
  6244. --------E-15BFDEBXFFFE-----------------------
  6245. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - SET ???
  6246.     AX = BFDEh
  6247.     BX = FFFEh
  6248.     CX:DX = ???
  6249. SeeAlso: AX=BFDEh/BX=FFFDh
  6250. --------E-15BFDEBXFFFF-----------------------
  6251. INT 15 - DESQview/X 1.02+ - DVDOS4GX.DVR - NOP
  6252.     AX = BFDEh
  6253.     BX = FFFFh
  6254. SeeAlso: AX=BFDEh/BX=0000h
  6255. --------B-15C0-------------------------------
  6256. INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
  6257.     AH = C0h
  6258. Return: CF set if BIOS doesn't support call
  6259.     CF clear on success
  6260.         ES:BX -> ROM table (see #00509)
  6261.     AH = status
  6262.         00h successful
  6263.         86h unsupported function
  6264. Notes:    the 1/10/86 XT BIOS returns an incorrect value for the feature byte
  6265.     the configuration table is at F000h:E6F5h in 100% compatible BIOSes
  6266.     Dell machines contain the signature "DELL" or "Dell" at absolute FE076h
  6267.       and a model byte at absolute address FE845h (see #00516)
  6268.     Hewlett-Packard machines contain the signature "HP" at F000h:00F8h and
  6269.       a product identifier at F000h:00FAh (see #00519)
  6270.     Compaq machines can be identified by the signature string "COMPAQ" at
  6271.       F000h:FFEAh, and is preceded by additional information (see #00517)
  6272.     Tandy 1000 machines contain 21h in the byte at F000h:C000h and FFh in
  6273.       the byte at FFFFh:000Eh; Tandy 1000SL/TL machines only provide the
  6274.       first three data bytes (model/submodel/revision) in the returned
  6275.       table
  6276.     Toshiba laptops contain the signature "TOSHIBA" at FE010h as part of
  6277.       a laptop information record at F000h:E000h (see #00520)
  6278.     some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte
  6279.       past the end of the configuration table
  6280.     the Phoenix 386 BIOS contains a second version and date string
  6281.       (presumably the last modification for that OEM version) beginning at
  6282.       F000h:FFD8h, with each byte doubled (so that both ROM chips contain
  6283.       the complete information)
  6284. SeeAlso: AH=C7h,AH=C9h,AX=D100h,AX=D103h
  6285.  
  6286. Format of ROM configuration table:
  6287. Offset    Size    Description    (Table 00509)
  6288.  00h    WORD    number of bytes following
  6289.  02h    BYTE    model (see #00515)
  6290.  03h    BYTE    submodel (see #00515)
  6291.  04h    BYTE    BIOS revision: 0 for first release, 1 for 2nd, etc.
  6292.  05h    BYTE    feature byte 1 (see #00510)
  6293.  06h    BYTE    feature byte 2 (see #00511)
  6294.  07h    BYTE    feature byte 3 (see #00512)
  6295.  08h    BYTE    feature byte 4 (see #00513)
  6296.  09h    BYTE    feature byte 5 (see #00514)
  6297.         ??? (08h) (Phoenix 386 v1.10)
  6298.         ??? (0Fh) (Phoenix 486 v1.03 PCI)
  6299. ---AWARD BIOS---
  6300.  0Ah  N BYTEs    AWARD copyright notice
  6301. ---Phoenix BIOS---
  6302.  0Ah    BYTE    ??? (00h)
  6303.  0Bh    BYTE    major version
  6304.  0Ch    BYTE    minor version (BCD)
  6305.  0Dh  4 BYTEs    ASCIZ string "PTL" (Phoenix Technologies Ltd)
  6306. ---Quadram Quad386---
  6307.  0Ah 17 BYTEs    ASCII signature string "Quadram Quad386XT"
  6308.  
  6309. Bitfields for feature byte 1:
  6310. Bit(s)    Description    (Table 00510)
  6311.  7    DMA channel 3 used by hard disk BIOS
  6312.  6    2nd 8259 installed
  6313.  5    Real-Time Clock installed
  6314.  4    INT 15/AH=4Fh called upon INT 09h
  6315.  3    wait for external event (INT 15/AH=41h) supported
  6316.  2    extended BIOS area allocated (usually at top of RAM)
  6317.  1    bus is Micro Channel instead of ISA
  6318.  0    system has dual bus (Micro Channel + ISA)
  6319. SeeAlso: #00509,#00511
  6320.  
  6321. Bitfields for feature byte 2:
  6322. Bit(s)    Description    (Table 00511)
  6323.  7    32-bit DMA supported
  6324.  6    INT 16/AH=09h (keyboard functionality) supported (see #00585)
  6325.  5    INT 15/AH=C6h (get POS data) supported
  6326.  4    INT 15/AH=C7h (return memory map info) supported
  6327.  3    INT 15/AH=C8h (en/disable CPU functions) supported
  6328.  2    non-8042 keyboard controller
  6329.  1    data streaming supported
  6330.  0    reserved
  6331. SeeAlso: #00509,#00512,AH=C6h,AH=C7h,AH=C8h,INT 16/AH=09h
  6332.  
  6333. Bitfields for feature byte 3:
  6334. Bit(s)    Description    (Table 00512)
  6335.  7    not used
  6336.  6-5    reserved
  6337.  4    POST supports ROM-to-RAM enable/disable
  6338.  3    SCSI subsystem supported on system board
  6339.  2    information panel installed
  6340.  1    IML (Initial Machine Load) system (BIOS loaded from disk)
  6341.  0    SCSI supported in IML
  6342. SeeAlso: #00509,#00511,#00512
  6343.  
  6344. Bitfields for feature byte 4:
  6345. Bit(s)    Description    (Table 00513)
  6346.  7    IBM "private" (set on N51SX, CL57SX)
  6347.  6    system has EEPROM
  6348.  5-3    ABIOS presence
  6349.     001 not supported
  6350.     010 supported in ROM
  6351.     011 supported in RAM (must be loaded)
  6352.  2    "private"
  6353.  1    system supports memory split at/above 16M
  6354.  0    POSTEXT directly supported by POST
  6355. SeeAlso: #00509,#00512,#00514
  6356.  
  6357. Bitfields for feature byte 5 (IBM):
  6358. Bit(s)    Description    (Table 00514)
  6359.  7-5    IBM "private"
  6360.  4-2    reserved
  6361.  1    system has enhanced mouse mode
  6362.  0    flash EPROM
  6363. SeeAlso: #00509,#00513
  6364.  
  6365. (Table 00515)
  6366. Values for model/submodel/revision:
  6367. Model  Submdl  Rev    BIOS date    System
  6368.  FFh    *    *    04/24/81    PC (original)
  6369.  FFh    *    *    10/19/81    PC (some bugfixes)
  6370.  FFh    *    *    10/27/82    PC (HD, 640K, EGA support)
  6371.  FFh    00h    rev      ???        Tandy 1000SL
  6372.  FFh    01h    rev      ???        Tandy 1000TL
  6373.  FFh    46h    ***      ???        Olivetti M15
  6374.  FEh    *    *    08/16/82    PC XT
  6375.  FEh    *    *    11/08/82    PC XT and Portable
  6376.  FEh    *    *    ../..x..    Toshiba laptops up to ~1987
  6377.                     ("x"=product ID) (see #00521)
  6378.  FEh    43h    ***      ???        Olivetti M240
  6379.  FEh    A6h    ???      ???        Quadram Quad386
  6380.  FDh    *    *    06/01/83    PCjr
  6381.  FCh    *    *    01/10/84    AT models 068,099 6 MHz 20MB
  6382.  FCh    *    *    02/25/93    Linux DOSEMU (all versions)
  6383.  FCh    00h    00h      ???        PC3270/AT
  6384.  FCh    00h    01h    06/10/85    AT model  239      6 MHz 30MB
  6385.  FCh    00h    > 01h      ???        7531/2 Industrial AT
  6386.  FCh    01h    00h    11/15/85    AT models 319,339 8 MHz, Enh Keyb, 3.5"
  6387.  FCh    01h    00h    09/17/87    Tandy 3000
  6388.  FCh    01h    00h    ../..x..    Toshiba laptops since ~1988
  6389.                     ("x"=product ID) (see #00521)
  6390.  FCh    01h    00h    03/08/93    Compaq DESKPRO/i
  6391.  FCh    01h    00h     various    Compaq DESKPRO, SystemPro, ProSignia
  6392.  FCh    01h    00h    07/20/93    Zenith Z-Lite 425L
  6393.  FCh    01h    00h    04/09/90    AMI BIOS
  6394.  FCh    01h    20h    06/10/92    AST
  6395.  FCh    01h    30h      ???        Tandy 3000NL
  6396.  FCh    01h    ???      ???        Compaq 286/386
  6397.  FCh    02h    00h    04/21/86    PC XT-286
  6398.  FCh    02h    00h     various    Compaq LTE Lite
  6399.  FCh    02h    00h    08/05/93    Compaq Contura 486/486c/486cx
  6400.  FCh    02h    00h    08/11/88    SoftWindows 1.0.1 (Power Macintosh)
  6401.  FCh    04h    00h    02/13/87     ** PS/2 Model 50 (10 MHz/1 ws 286)
  6402.  FCh    04h    01h    05/09/87    PS/2 Model 50 (10 Mhz 286, LW-type 32)
  6403.  FCh    04h    02h      ???        PS/2 Model 50
  6404.  FCh    04h    02h    01/28/88    PS/2 Model 50Z (10 Mhz 286, LW-type 33)
  6405.  FCh    04h    03h    04/18/88    PS/2 Model 50Z (10 MHz/0 ws 286)
  6406.  FCh    04h    04h      ???        PS/2 Model 50Z
  6407.  FCh    05h    00h    02/13/87     ** PS/2 Model 60 (10 MHz 286)
  6408.  FCh    06h    00h      ???        IBM 7552-140 "Gearbox"
  6409.  FCh    06h    01h      ???        IBM 7552-540 "Gearbox"
  6410.  FCh    08h    ***      ???        Epson, unknown model
  6411.  FCh    08h    00h      ???        PS/2 Model 25/286
  6412.  FCh    09h    00h      ???        PS/2 Model 25 (10 MHz 286)
  6413.  FCh    09h    00h    08/25/88    PS/2 Model 30 286 (10 Mhz, LW-type 37)
  6414.  FCh    09h    02h    06/28/89    PS/2 Model 30-286
  6415.  FCh    09h    02h    06/28/89    PS/2 Model 25 286 (10 Mhz, LW-type 37)
  6416.  FCh    0Bh    00h    12/01/89    PS/1 (LW-Type 44)
  6417.  FCh    0Bh    00h    02/16/90    PS/1 Model 2011 (10 MHz 286)
  6418.  FCh    20h    00h    02/18/93    Compaq ProLinea
  6419.  FCh    25h    09h    12/07/91    PS/2 Model 56 SLC (20 MHz 386SLC)
  6420.  FCh    30h    ***      ???        Epson, unknown model
  6421.  FCh    31h    ***      ???        Epson, unknown model
  6422.  FCh    33h    ***      ???        Epson, unknown model
  6423.  FCh    42h    ***      ???        Olivetti M280
  6424.  FCh    45h    ***      ???        Olivetti M380 (XP 1, XP3, XP 5)
  6425.  FCh    48h    ***      ???        Olivetti M290
  6426.  FCh    4Fh    ***      ???        Olivetti M250
  6427.  FCh    50h    ***      ???        Olivetti M380 (XP 7)
  6428.  FCh    51h    ***      ???        Olivetti PCS286
  6429.  FCh    52h    ***      ???        Olivetti M300
  6430.  FCh    81h    00h    01/15/88    Phoenix 386 BIOS v1.10 10a
  6431.  FCh    81h    01h      ???        "OEM machine"
  6432.  FCh    82h    01h      ???        "OEM machine"
  6433.  FCh    94h    00h      ???        Zenith 386
  6434.  FBh    00h    01h    01/10/86    PC XT-089, Enh Keyb, 3.5" support
  6435.  FBh    00h    01h    05/13/94    HP 200LX 2MB BIOS 1.01 A D german
  6436.  FBh    00h    02h    05/09/86    PC XT
  6437.  FBh    00h    04h    08/19/93    HP 100LX 1MB BIOS 1.04 A
  6438.  FBh    4Ch    ***      ???        Olivetti M200
  6439.  FAh    00h    00h    09/02/86    PS/2 Model 30 (8 MHz 8086)
  6440.  FAh    00h    01h    12/12/86    PS/2 Model 30
  6441.  FAh    00h    02h    02/05/87    PS/2 Model 30
  6442.  FAh    01h    00h    06/26/87    PS/2 Model 25/25L (8 MHz 8086)
  6443.  FAh    30h    00h      ???        IBM Restaurant Terminal
  6444.  FAh    4Eh    ***      ???        Olivetti M111
  6445.  FAh    FEh    00h      ???        IBM PCradio 9075
  6446.  F9h    00h    00h    09/13/85    PC Convertible
  6447.  F9h    FFh    00h      ???        PC Convertible
  6448.  F8h    00h    00h    03/30/87     ** PS/2 Model 80 (16MHz 386)
  6449.  F8h    00h    00h      ???        PS/2 Model 75 486 (33Mhz 486)
  6450.  F8h    01h    00h    10/07/87    PS/2 Model 80 (20MHz 386)
  6451.  F8h    02h    00h      ???        PS/2 Model 55-5571
  6452.  F8h    04h    00h    01/29/88    PS/2 Model 70 (20 Mhz 386DX,LW-type 33)
  6453.  F8h    04h    02h    04/11/88    PS/2 Model 70 20MHz, type 2 system brd
  6454.  F8h    04h    03h    03/17/89    PS/2 Model 70 20MHz, type 2 system brd
  6455.  F8h    05h    00h      ???        IBM PC 7568
  6456.  F8h    06h    00h      ???        PS/2 Model 55-5571
  6457.  F8h    07h    00h      ???        IBM PC 7561/2
  6458.  F8h    07h    01h      ???        PS/2 Model 55-5551
  6459.  F8h    07h    02h      ???        IBM PC 7561/2
  6460.  F8h    07h    03h      ???        PS/2 Model 55-5551
  6461.  F8h    09h    00h    01/29/88    PS/2 Model 70 16MHz 386DX, type 1 sysbd
  6462.  F8h    09h    02h    04/11/88    PS/2 Model 70 some models
  6463.  F8h    09h    03h    03/17/89    PS/2 Model 70 some models
  6464.  F8h    09h    04h    12/15/89    PS/2 Model 70 (16 Mhz 386, LW-type 33)
  6465.  F8h    0Bh    00h    01/18/89    PS/2 Model P70 (8573-121) typ 2 sys brd
  6466.  F8h    0Bh    02h    12/16/89    PS/2 Model P70 ??
  6467.  F8h    0Ch    00h    11/02/88    PS/2 Model 55SX (16 MHz 386SX)
  6468.  F8h    0Dh    00h      ???        PS/2 Model 70 25MHz, type 3 system brd
  6469.  F8h    0Dh    00h    06/08/88    PS/2 Model 70 386 25MHz, type 3 sys brd
  6470.  F8h    0Dh    01h    02/20/89    PS/2 Model 70 386 25MHz, type 3 sys brd
  6471.  F8h    0Dh    ???    12/01/89    PS/2 Model 70 486 25Mhz, type 3 sys brd
  6472.  F8h    0Eh    00h      ???        PS/1 486SX
  6473.  F8h    0Fh    00h      ???        PS/1 486DX
  6474.  F8h    10h    00h      ???        PS/2 Model 55-5551
  6475.  F8h    11h    00h    10/01/90    PS/2 Model 90 XP (25 MHz 486)
  6476.  F8h    12h    00h      ???        PS/2 Model 95 XP
  6477.  F8h    13h    00h    10/01/90    PS/2 Model 90 XP (33 MHz 486)
  6478.  F8h    14h    00h    10/01/90    PS/2 Model 90-AK9 (25 MHz 486), 95 XP
  6479.  F8h    15h    00h      ???        PS/2 Model 90 XP
  6480.  F8h    16h    00h    10/01/90    PS/2 Model 90-AKD / 95XP486 (33MHz 486)
  6481.  F8h    17h    00h      ???        PS/2 Model 90 XP
  6482.  F8h    19h    05h      ???        PS/2 Model 35/35LS or 40 (20 MHz 386SX)
  6483.  F8h    19h    05h    03/15/91    PS/2 Model 35 SX / 40 SX (LW-type 37)
  6484.  F8h    19h    06h    04/04/91    PS/2 Model 35 SX / 40 SX (LW-type 37)
  6485.  F8h    1Ah    00h      ???        PS/2 Model 95 XP
  6486.  F8h    1Bh    00h    09/29/89    PS/2 Model 70 486 (25 Mhz 386DX)
  6487.  F8h    1Bh    00h    10/02/89    PS/2 Model 70-486 (25 MHz 486)
  6488.  F8h    1Ch    00h    02/08/90    PS/2 Model 65-121 / 65 SX (16MHz 386SX)
  6489.  F8h    1Eh    00h    02/08/90    PS/2 Model 55LS (16 MHz 386SX)
  6490.  F8h    23h    00h      ???        PS/2 Model L40 SX
  6491.  F8h    23h    01h      ???        PS/2 Model L40 SX (20 MHz 386SX)
  6492.  F8h    23h    02h    02/27/91    PS/2 Model L40 SX (20Mhz386SX,LW-typ37)
  6493.  F8h    25h    00h      ???        PS/2 Model 57 SLC
  6494.  F8h    25h    06h      ???        PS/2 Model M57 (20 MHz 386SLC)
  6495.  F8h    26h    00h      ???        PS/2 Model 57 SX
  6496.  F8h    26h    01h      ???        PS/2 Model 57 (20 MHz 386SX)
  6497.  F8h    26h    02h    07/03/91    PS/2 Model 57 SX (20Mhz 386SX, SCSI)
  6498.  F8h    28h    00h      ???        PS/2 Model 95 XP
  6499.  F8h    29h    00h      ???        PS/2 Model 90 XP
  6500.  F8h    2Ah    00h      ???        PS/2 Model 95 XP (50 MHz 486)
  6501.  F8h    2Bh    00h      ???        PS/2 Model 90 / 90XP486 (50 MHz 486)
  6502.  F8h    2Ch    00h      ???        PS/2 Model 95 XP
  6503.  F8h    2Ch    01h      ???        PS/2 Model 95 (20 MHz 486SX)
  6504.  F8h    2Dh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX)
  6505.  F8h    2Eh    00h      ???        PS/2 Model 95 XP
  6506.  F8h    2Eh    00h      ???        PS/2 Model 95 XP486 (20 Mhz 486SX)
  6507.  F8h    2Eh    01h      ???        PS/2 Model 95 (20 MHz 486SX + 487SX)
  6508.  F8h    2Fh    00h      ???        PS/2 Model 90 XP (20 MHz 486SX + 487SX)
  6509.  F8h    30h    00h      ???        PS/1 Model 2121 (16 MHz 386SX)
  6510.  F8h    33h    00h      ???        PS/2 Model 30-386
  6511.  F8h    34h    00h      ???        PS/2 Model 25-386
  6512.  F8h    36h    00h      ???        PS/2 Model 95 XP
  6513.  F8h    37h    00h      ???        PS/2 Model 90 XP
  6514.  F8h    38h    00h      ???        PS/2 Model 57
  6515.  F8h    39h    00h      ???        PS/2 Model 95 XP
  6516.  F8h    3Fh    00h      ???        PS/2 Model 90 XP
  6517.  F8h    40h    00h      ???        PS/2 Model 95 XP
  6518.  F8h    41h    00h      ???        PS/2 Model 77
  6519.  F8h    45h    00h      ???        PS/2 Model 90 XP (Pentium)
  6520.  F8h    46h    00h      ???        PS/2 Model 95 XP (Pentium)
  6521.  F8h    47h    00h      ???        PS/2 Model 90/95 E (Pentium)
  6522.  F8h    48h    00h      ???        PS/2 Model 85
  6523.  F8h    49h    00h      ???        PS/ValuePoint 325T
  6524.  F8h    4Ah    00h      ???        PS/ValuePoint 425SX
  6525.  F8h    4Bh    00h      ???        PS/ValuePoint 433DX
  6526.  F8h    4Eh    00h      ???        PS/2 Model 295
  6527.  F8h    50h    00h      ???        PS/2 Model P70 (8573) (16 MHz 386)
  6528.  F8h    50h    01h    12/16/89    PS/2 Model P70 (8570-031)
  6529.  F8h    52h    00h      ???        PS/2 Model P75 (33 MHz 486)
  6530.  F8h    56h    00h      ???        PS/2 Model CL57 SX
  6531.  F8h    57h    00h      ???        PS/2 Model 90 XP
  6532.  F8h    58h    00h      ???        PS/2 Model 95 XP
  6533.  F8h    59h    00h      ???        PS/2 Model 90 XP
  6534.  F8h    5Ah    00h      ???        PS/2 Model 95 XP
  6535.  F8h    5Bh    00h      ???        PS/2 Model 90 XP
  6536.  F8h    5Ch    00h      ???        PS/2 Model 95 XP
  6537.  F8h    5Dh    00h      ???        PS/2 Model N51 SLC
  6538.  F8h    5Eh    00h      ???        IBM ThinkPad 700
  6539.  F8h    61h    ***      ???        Olivetti P500
  6540.  F8h    62h    ***      ???        Olivetti P800
  6541.  F8h    80h    00h      ???        PS/2 Model 80 (25 MHz 386)
  6542.  F8h    80h    01h    11/21/89    PS/2 Model 80-A21 (25 Mhz 386)
  6543.  F8h    81h    00h      ???        PS/2 Model 55-5502
  6544.  F8h    87h    00h      ???        PS/2 Model N33SX
  6545.  F8h    88h    00h      ???        PS/2 Model 55-5530T
  6546.  F8h    97h    00h      ???        PS/2 Model 55 Note N23SX
  6547.  F8h    99h    00h      ???        PS/2 Model N51 SX
  6548.  F8h    F2h    30h      ???        Reply Model 32
  6549.  F8h    F6h    30h      ???        Memorex Telex
  6550.  F8h    FDh    00h      ???        IBM Processor Complex (with VPD)
  6551.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX)
  6552.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX)
  6553.  F8h    ???    ???      ???        PS/2 Model 90 (25 MHz 486SX + 487SX)
  6554.  F8h    ???    ???      ???        PS/2 Model 95 (25 MHz 486SX + 487SX)
  6555.  E4h    ???    ???      ???        Triumph Adler PC/XT
  6556.  E1h    ???    ???      ???        ??? (checked for by DOS4GW.EXE)
  6557.  E1h    00h    00h      ???        PS/2 Model 55-5530 Laptop
  6558.  D9h    ???    ???      ???        Peacock XT
  6559.  9Ah    *    *      ???        Compaq XT/Compaq Plus
  6560.  30h    ???    ???      ???        Sperry PC
  6561.  2Dh    *    *      ???        Compaq PC/Compaq Deskpro
  6562.  ???    56h    ???      ???        Olivetti, unknown model
  6563.  ???    74h    ???      ???        Olivetti, unknown model
  6564. Notes:    BIOS dates may vary without changes to the revision code, especially
  6565.       for non-IBM machines
  6566.     * This BIOS call is not implemented in these early versions or under
  6567.       Linux's DOSEMU.  Read the Model byte at F000h:FFFEh and BIOS date at
  6568.       F000h:FFF5h instead.
  6569.    ** These BIOS versions require the DASDDRVR.SYS patches.
  6570.   *** These Olivetti and Epson machines store the submodel in the byte at
  6571.     F000h:FFFDh.
  6572. SeeAlso: #00509,#00516
  6573.  
  6574. (Table 00516)
  6575. Values for Dell model byte:
  6576.  02h    Dell 200
  6577.  03h    Dell 300
  6578.  05h    Dell 220
  6579.  06h    Dell 310
  6580.  07h    Dell 325
  6581.  09h    Dell 310A
  6582.  0Ah    Dell 316
  6583.  0Bh    Dell 220E
  6584.  0Ch    Dell 210
  6585.  0Dh    Dell 316SX
  6586.  0Eh    Dell 316LT
  6587.  0Fh    Dell 320LX
  6588.  11h    Dell 425E
  6589. SeeAlso: #00509,#00515
  6590.  
  6591. Format of Compaq product information:
  6592. Address        Size    Description    (Table 00517)
  6593.  F000h:FFE4h    BYTE    product family code (first byte)
  6594.  F000h:FFE5h    BYTE    Point release number
  6595.  F000h:FFE6h    BYTE    ROM version code
  6596.  F000h:FFE7h    BYTE    product family code (second byte)
  6597.  F000h:FFE8h    WORD    BIOS type code
  6598. SeeAlso: #00518,#00520
  6599.  
  6600. Format of Hewlett-Packard ROM ID at F000h:00F8h:
  6601. Offset    Size    Description    (Table 00518)
  6602.  00h  2 BYTEs    signature "HP" (48h 50h)
  6603.  02h  2 BYTEs    00h 00h
  6604.  04h    BYTE    secondary code revision
  6605.  05h    BYTE    primary code revision
  6606.  06h    BYTE    date code, year-1960 (BCD)
  6607.  07h    BYTE    date code, week of year (BCD)
  6608. SeeAlso: #00517,#00519
  6609.  
  6610. Bitfields for Hewlett-Packard product identifier:
  6611. Bit(s)    Description    (Table 00519)
  6612.  4-0    machine code
  6613.     0 original Vectra
  6614.     1 ES/12
  6615.     2 RS/20
  6616.     3 Portable/CS
  6617.     4 ES
  6618.     5 CS
  6619.     6 RS/16
  6620.     other reserved
  6621.  7-5    CPU type
  6622.     0 = 80286
  6623.     1 = 8088
  6624.     2 = 8086
  6625.     3 = 80386
  6626.     other reserved
  6627. SeeAlso: #00518
  6628.  
  6629. Format of Toshiba laptop information:
  6630. Offset    Size    Description    (Table 00520)
  6631.  00h  8 BYTEs    ASCII product number (e.g. "T2200SX ")
  6632.  08h  8 BYTEs    ASCII version number (e.g. "V1.20   ")
  6633.  10h  8 BYTEs    ASCII signature string "TOSHIBA "
  6634.  18h  8 BYTEs    always zero???
  6635.  20h    DWORD    -> built-in BIOS setup program entry point or 0000h:0000h
  6636. Note:    this record is located at F000h:E000h
  6637. SeeAlso: #00517,#00518
  6638.  
  6639. (Table 00521)
  6640. Values for Toshiba product ID:
  6641. model prodID   version      date       product number
  6642.  FEh    29h        ../..)..   Toshiba T1000LE
  6643.  FEh    2Ah        ../..*..   Toshiba T1000XE
  6644.  FEh    2Bh        ../..+..   Toshiba T1000SE
  6645.  FEh    2Ch        ../..,..   Toshiba T1000
  6646.  FEh    2Dh        ../..-..   Toshiba T1200F
  6647.  FEh    2Dh    V4.00    12/26-87   Toshiba T1200H
  6648.  FEh    2Eh        ../.....   Toshiba T1100+
  6649.  FCh    22h        ../.."..   Toshiba T8500
  6650.  FCh    26h        01/15&88   Toshiba T5200
  6651.  FCh    27h        ../..'..   Toshiba T5100
  6652.  FCh    28h        ../..(..   Toshiba T2000
  6653.  FCh    2Ah        12/26*89   Toshiba T1200XE
  6654.  FCh    2Bh        ../..+..   Toshiba T1600
  6655.  FCh    2Ch        ../..,..   Toshiba T3100e
  6656.  FCh    2Dh        ../..-..   Toshiba T3200
  6657.  FCh    2Fh        ../../..   Toshiba T3100
  6658.  FCh    34h    V1.50    02/04494   Toshiba T100X
  6659.  FCh    38h        ../..8..   Toshiba T2000SXe
  6660.  FCh    39h    V1.20    09/16991   Toshiba T2200SX
  6661.  FCh    39h    V1.40    10/01992   Toshiba T2200SX
  6662.  FCh    3Ch    V1.50    01/28<91   Toshiba T2000SX
  6663.  FCh    3Dh        ../..=..   Toshiba T3200SXC
  6664.  FCh    3Eh        ../..>..   Toshiba T3100SX
  6665.  FCh    3Fh        ../..?..   Toshiba T3200SX
  6666.  FCh    40h        ../..@..   Toshiba T4500C
  6667.  FCh    41h    V1.20    04/05A92   Toshiba T4500     ("T4500SXC" ???)
  6668.  FCh    45h    V3.20    04/14E92   Toshiba T4400SX   ("C" or "SXC" on cover)
  6669.  FCh    45h        01/13E93   Toshiba T4400SXC
  6670.  FCh    46h *        ../..F..   Toshiba T6400
  6671.  FCh    46h *        ../..F..   Toshiba T6400C
  6672.  FCh    5Fh    V1.40    01/18_94   Toshiba T3300SL
  6673.  FCh    69h        ../..i..   Toshiba T1900C    ("T1900CT" ???)
  6674.  FCh    6Ah    V1.30    05/19j93   Toshiba T1900     ("T1900S" ???)
  6675.  FCh    6Dh    V1.10    12/25m92   Toshiba T1850C
  6676.  FCh    6Eh    V1.00    08/19n92   Toshiba T1850
  6677.  FCh    6Eh    V1.10    12/25n92   Toshiba T1850
  6678.  FCh    6Fh    V1.00    07/17o92   Toshiba T1800
  6679.  FCh    6Fh    V1.10    12/25o92   Toshiba T1800
  6680.  FCh    7Eh    V1.30    06/17~93   Toshiba T4600C
  6681.  FCh    7Fh    V1.40    11/10x94   Toshiba T4600
  6682.  FCh    8Ah    V1.30    10/22x93   Toshiba T6600C
  6683.  FCh    91h    V1.20    07/15x94   Toshiba T2400CT
  6684.  FCh    91h    V5.00    07/28x95   Toshiba T2400CS/CT
  6685.  FCh    92h    V5.00    07/28x95   Toshiba T3600CT
  6686.  FCh    96h *    V1.40    12/08x94   Toshiba T200
  6687.  FCh    96h *    V1.50    12/08x94   Toshiba T200CS    (T200)
  6688.  FCh    97h        ../..x..   Toshiba T4800CT
  6689.  FCh    98h *    V1.10    12/22x93   Toshiba T1910
  6690.  FCh    98h *    V2.40    07/12x94   Toshiba T1910/CS    (T19XX)
  6691.  FCh    99h        ../..x..   Toshiba T4700CS
  6692.  FCh    9Bh    V2.30    01/31x94   Toshiba T4700CT
  6693.  FCh    9Bh    V2.50    03/22x94   Toshiba T4700CT
  6694.  FCh    9Bh    V5.00    07/28x95   Toshiba T4700CT
  6695.  FCh    9Ch    V1.30    01/11x94   Toshiba T1950CT
  6696.  FCh    9Ch    V2.50    07/22x94   Toshiba T1950CT    (T19XX)
  6697.  FCh    9Dh *    V2.40    07/12x94   Toshiba T1950/CS    (T19XX)
  6698.  FCh    9Eh *    V1.20    12/25x93   Toshiba T3400
  6699.  FCh    9Eh *    V1.30    03/22x94   Toshiba T3400/CT
  6700.  FCh    B5h **    V5.10    08/25x95   Toshiba T2110/CS    (T21XX)
  6701.  FCh    B5h    V5.10    08/25x95   Toshiba T2130CS/CT    (T21XX)
  6702.  FCh    BAh    V1.30    02/16x95   Toshiba T2150CDS/CDT
  6703.  FCh    BAh    V5.00    07/27x95   Toshiba T2150CDS/CDT (T2150)
  6704.  FCh    BBh **    V1.30    01/25x95   Toshiba T2100/CS/CT
  6705.  FCh    BBh **    V5.00    07/27x95   Toshiba T2100/CS/CT
  6706.  FCh    BCh    V1.20    12/05x94   Toshiba T2450CT
  6707.  FCh    BCh    V5.00    07/28x95   Toshiba T2450CT
  6708.  FCh    BEh    V5.00    07/28x95   Toshiba T4850CT
  6709.  FCh    C0h    V5.20    05/30x96   Toshiba 420CDS/CDT
  6710.  FCh    C1h    V5.20    03/27x96   Toshiba 100CS
  6711.  FCh    C3h    V5.60    07/19x96   Toshiba 710CDT / 720CDT
  6712.  FCh    C6h    V5.30    11/30x95   Toshiba 410CS/CDT
  6713.  FCh    CAh    V5.10    08/18x95   Toshiba 400CS/CDT
  6714.  FCh    CAh    V5.40    12/18x95   Toshiba 400CS/CDT
  6715.  FCh    CBh    V5.10    09/01x95   Toshiba 610CT
  6716.  FCh    CCh    V5.50    06/13x96   Toshiba 700CS/CT
  6717.  FCh    CFh    V5.00    08/07x95   Toshiba T4900CT
  6718.  FCh    DCh    V5.10    06/17x96   Toshiba 650CT
  6719.  FCh    DCh    V5.10    05/10x96   Toshiba 110CS/CT
  6720.  FCh    DDh    V5.10    05/10x96   Toshiba 110CS/CT
  6721.  FCh    DFh    V5.20    05/27x96   Toshiba 500CS/CDT
  6722.  FCh    ???    V5.???    ../..x..   Toshiba 620CT
  6723.  FCh    ???    V5.???    ../..x..   Toshiba 660CDT
  6724.  FCh    ???    V5.30    11/22/96   Toshiba 730CDT
  6725.  FCh    ???    V6.00    09/20/96   Toshiba 200CDS/CDT
  6726.  FCh    ???    V6.20    11/14/96   Toshiba 430CDS/CDT
  6727.  FCh    ???    V6.40    12/05/96   Toshiba 510CS/CDT
  6728. Notes:    the 8-bit ASCII graphics character in the "date" column above
  6729.       has been substituted by "x" if larger than 80h
  6730.     BIOS version numbers and dates may vary, esp. due to harddisk and
  6731.       (flash) BIOS upgrades; all BIOS versions 5.xx are flash updates
  6732.       for Windows95, the product number may indicate the series only
  6733.       (T21XX) or does no longer contain the exact type suffix (CS/CT)
  6734.     the most recent versions of the BIOS have stopped including the
  6735.       product ID code in the BIOS date
  6736.     [*] These models have monochrome and color versions which can be
  6737.       distinguished with INT 42/AX=7503h (WD90C24 chipset)
  6738.     [**] These models have monochrome and color versions which can be
  6739.       distinguished with INT 10/AX=5F50h (CT655xx chipset)
  6740.     models not found here like T21x5 are variants differing only in
  6741.       bundled software
  6742. SeeAlso: #00515
  6743. --------B-15C1-------------------------------
  6744. INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
  6745.     AH = C1h
  6746. Return: CF set on error
  6747.     CF clear if successful
  6748.         ES = segment of data area (see #M0001,#M0004,#M0005)
  6749. SeeAlso: AH=04h"ABIOS",MEM 0040h:000Eh"DATA"
  6750. --------M-15C200-----------------------------
  6751. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE
  6752.     AX = C200h
  6753.     BH = new state
  6754.         00h disabled
  6755.         01h enabled
  6756. Return: CF set on error
  6757.     AH = status (see #00522)
  6758. Note:    IBM classifies this function as required
  6759. SeeAlso: AX=C201h,AX=C207h,AX=C208h
  6760.  
  6761. (Table 00522)
  6762. Values for pointing device function status:
  6763.  00h    successful
  6764.  01h    invalid function
  6765.  02h    invalid input
  6766.  03h    interface error
  6767.  04h    need to resend
  6768.  05h    no device handler installed
  6769. --------M-15C201-----------------------------
  6770. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET
  6771.     AX = C201h
  6772. Return: CF set on error
  6773.         AH = status (see #00522)
  6774.     CF clear if successful
  6775.         BH = device ID
  6776.         BL = value returned by attached device after reset
  6777.         AAh if device is a mouse
  6778. Notes:    after successful completion of this call, the pointing device is set
  6779.       as follows: disabled, sample rate 100 Hz, resolution 4 counts/mm,
  6780.       scaling 1:1, unchanged data package size
  6781.     IBM classifies this function as required
  6782. SeeAlso: INT 33/AX=0000h,AX=C200h,AX=C207h
  6783. --------M-15C202-----------------------------
  6784. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE
  6785.     AX = C202h
  6786.     BH = sampling rate
  6787.         00h 10/second
  6788.         01h 20/second
  6789.         02h 40/second
  6790.         03h 60/second
  6791.         04h 80/second
  6792.         05h 100/second
  6793.         06h 200/second
  6794. Return: CF set on error
  6795.         AH = status (see #00522)
  6796. SeeAlso: INT 33/AX=001Ch
  6797. --------M-15C203-----------------------------
  6798. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION
  6799.     AX = C203h
  6800.     BH = resolution (see #00523)
  6801. Return: CF set on error
  6802.         AH = status (see #00522)
  6803.  
  6804. (Table 00523)
  6805. Values for pointing device resolution:
  6806.  00h    one count per mm
  6807.  01h    two counts per mm
  6808.  02h    four counts per mm
  6809.  03h    eight counts per mm
  6810. --------M-15C204-----------------------------
  6811. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE
  6812.     AX = C204h
  6813. Return: CF set on error
  6814.         AH = status (see #00522)
  6815.     CF clear if successful
  6816.         BH = device ID
  6817. --------M-15C205-----------------------------
  6818. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE
  6819.     AX = C205h
  6820.     BH = data package size (1 - 8 bytes)
  6821. Return: CF set on error
  6822.         AH = status (see #00522)
  6823. Note:    the pointing device is set as follows: disabled, 100 Hz sample rate,
  6824.       resolution 4 counts/mm, scaling 1:1
  6825. SeeAlso: AX=C201h
  6826. --------M-15C206-----------------------------
  6827. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - EXTENDED COMMANDS
  6828.     AX = C206h
  6829.     BH = subfunction
  6830.         00h return device status
  6831.         Return: BL = pointing device status (see #00524)
  6832.             CL = resolution (see #00523)
  6833.             DL = sample rate, reports per second
  6834.         01h set scaling at 1:1
  6835.         02h set scaling at 2:1
  6836. Return: CF set on error
  6837.         AH = status (see #00522)
  6838.  
  6839. Bitfields for pointing device status:
  6840. Bit(s)    Description    (Table 00524)
  6841.  0    right button pressed
  6842.  1    reserved
  6843.  2    left button pressed
  6844.  3    reserved
  6845.  4    0 if 1:1 scaling, 1 if 2:1 scaling
  6846.  5    device enabled
  6847.  6    0 if stream mode, 1 if remote mode
  6848.  7    reserved
  6849. --------M-15C207-----------------------------
  6850. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR
  6851.     AX = C207h
  6852.     ES:BX -> FAR user device handler or 0000h:0000h to cancel
  6853. Return: CF set on error
  6854.         AH = status (see #00522)
  6855. Note:    when the subroutine is called, it is passed the following values on
  6856.       the stack; the handler should return with a FAR return without
  6857.       popping the stack:
  6858.         WORD 1: status (see #00525)
  6859.         WORD 2: X data (high byte = 00h)
  6860.         WORD 3: Y data (high byte = 00h)
  6861.         WORD 4: 0000h
  6862. SeeAlso: INT 33/AX=000Ch
  6863.  
  6864. Bitfields for pointing device status:
  6865. Bit(s)    Description    (Table 00525)
  6866.  15-8    reserved (0)
  6867.  7    Y data overflowed
  6868.  6    X data overflowed
  6869.  5    Y data is negative
  6870.  4    X data is negative
  6871.  3    reserved (1)
  6872.  2    reserved (0)
  6873.  1    right button pressed
  6874.  0    left button pressed
  6875. --------M-15C208-----------------------------
  6876. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE - WRITE TO POINTER PORT
  6877.     AX = C208h
  6878.     BL = byte to be sent to the pointing device
  6879. Note:    IBM classifies this function as optional
  6880. SeeAlso: AX=C200h,AX=C209h
  6881. --------M-15C209-----------------------------
  6882. INT 15 - SYSTEM - POINTING DEVICE BIOS INTERFACE - READ FROM POINTER PORT
  6883.     AX = C209h
  6884. Return: BL = first byte read from pointing device
  6885.     CL = second byte read
  6886.     DL = third byte read
  6887. Note:    IBM classifies this function as optional
  6888. SeeAlso: AX=C200h,AX=C208h
  6889. --------M-15C2-------------------------------
  6890. INT 15 - IBM SurePath BIOS - Officially "Private" Function
  6891.     AH = C2h
  6892.     AL = 10h-23h
  6893. SeeAlso: AH=07h"IBM",AH=3Eh"IBM"
  6894. --------B-15C3------------------------------
  6895. INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
  6896.     AH = C3h
  6897.     AL = function
  6898.         00h disable PS/2 watchdog timer
  6899.         01h enable PS/2 watchdog timer
  6900.         BX = timer counter (0001h-00FFh)
  6901.         02h disable Gearbox system
  6902.         03h enable Gearbox system
  6903. Return: CF set on error
  6904.     CF clear if successful
  6905. Note:    the watchdog timer generates an NMI
  6906. SeeAlso: INT 21/AH=2Bh/CX=6269h"WDTSR"
  6907. --------B-15C4-------------------------------
  6908. INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
  6909.     AH = C4h
  6910.     AL = subfunction
  6911.         00h return base POS register address
  6912.         01h enable selected slot for setup
  6913.         BL = slot number (1 to 8)
  6914.         02h disable setup for all slots (enable adapter)
  6915. Return: CF set on error
  6916.     DX = base POS register address (if subfunction 00h)
  6917. SeeAlso: AH=C6h
  6918. --------B-15C5-------------------------------
  6919. INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
  6920.     AH = C5h
  6921.     AL = interrupt being invoked
  6922.         01h INT 19
  6923.         02h INT 14
  6924.         03h INT 16
  6925.         04h INT 40 (floppy INT 13)
  6926.         05h INT 17
  6927.         06h INT 10
  6928.         07h INT 12
  6929.         08h INT 11
  6930.         09h INT 1A
  6931. Return: all registers except AX must be preserved
  6932. Notes:    called as the very first action of the indicated ROM BIOS interrupt
  6933.       handlers on the PS/2 Models 30/286, 50Z, and 95
  6934.     default handler does nothing and returns CF clear for the above
  6935.       subfunctions, CF set and AH=86h for all other subfunctions
  6936.     value of AX passed to the original interrupt handler is pushed on
  6937.       stack immediately prior to call
  6938. --------B-15C6-------------------------------
  6939. INT 15 U - later PS/2 models - GET POS DATA
  6940.     AH = C6h
  6941.     ???
  6942. Return: ???
  6943. Notes:    this function is referenced by name and number in some IBM BIOS manuals
  6944.     IBM reports that "there are a number of problems with this call" and
  6945.       does not recommend its use.
  6946. SeeAlso: AH=C4h
  6947. --------B-15C7-------------------------------
  6948. INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION
  6949.     AH = C7h
  6950.     DS:SI -> user supplied memory map table (see #00526)
  6951. Return: CF set on error
  6952.     CF clear if successful
  6953. Notes:    call AH=C0h and examine bit 4 of feature byte 2 to check if this
  6954.       function is supported
  6955.     IBM classifies this function as optional
  6956.     Windows95 OSR2 reportedly does not support this function even though
  6957.       INT 15/AH=C0h indicates that it is available (observed on several
  6958.       different systems)
  6959. SeeAlso: AH=C0h,AH=C9h,AH=D1h,AX=E820h
  6960.  
  6961. Format of memory-map table structure:
  6962. Offset    Size    Description    (Table 00526)
  6963.  00h    WORD    length of table (excluding this word)
  6964.  02h    DWORD    local memory between 1M and 16M, in 1K blocks
  6965.  06h    DWORD    local memory between 16M and 4G, in 1K blocks
  6966.  0Ah    DWORD    system memory between 1M and 16M, in 1K blocks
  6967.  0Eh    DWORD    system memory between 16M and 4G, in 1K blocks
  6968.  12h    DWORD    cacheable memory between 1M and 16M, in 1K blocks
  6969.  16h    DWORD    cacheable memory between 16M and 4G, in 1K blocks
  6970.  1Ah    DWORD    1K blocks before start of non-system memory between 1M and 16M
  6971.  1Eh    DWORD    1K blocks before start of non-system memory between 16M and 4G
  6972.  22h    WORD    start segment of largest free block from C0000h-DFFFFh
  6973.  24h    WORD    size of largest free block
  6974.  26h    DWORD    reserved
  6975. --------B-15C8-------------------------------
  6976. INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS
  6977.     AH = C8h
  6978.     AL = function
  6979.         00h disable L1 cache
  6980.         01h enable L1 cache
  6981.         ---models 90 and 95 only---
  6982.         02h disable L2 cache
  6983.         03h enable L2 cache
  6984.         04h disable both caches
  6985.         05h enable both caches
  6986.         06h return status of both caches
  6987.         07h-FFh Reserved
  6988. Return: CF set on error
  6989.     CF clear if successful
  6990.     AH = status (see #00527)
  6991.     For subfunction 06h only:
  6992.         BL = status of L1 cache
  6993.         00h enabled
  6994.         01h disabled or not installed
  6995.         02h disabled due to test error (can not be enabled)
  6996.         BH = status of L2 cache (same codes as BL)
  6997. Notes:     supported by at least PS/2 70, 70/486, 80-A21, 90, 95
  6998.     call AH=C0h and examine bit 3 of feature byte 2 to check if this
  6999.       function is supported.
  7000.     on a 486 system, any external caches must be disabled when the
  7001.       on-chip cache (L1) is disabled.
  7002. SeeAlso: AH=C0h
  7003.  
  7004. (Table 00527)
  7005. Values for status:
  7006.  00h    operation successful
  7007.  01h    function choice (in AL) is invalid
  7008.  02h    NVRAM data is invalid
  7009.  03h    cache test error
  7010.  04h    (90 and 95 only) cannot perform operation requested due to state of
  7011.       other cache (also see note above)
  7012.  05h    no L2 cache is present
  7013.  07h    invalid input values
  7014.  09h    CPU in protected mode
  7015. --------B-15C9-------------------------------
  7016. INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
  7017.     AH = C9h
  7018.     AL = 10h (may be required on some non-PS BIOSes)
  7019. Return: CF clear if successful
  7020.         AH = 00h
  7021.         CH = CPU type (see #00528)
  7022.         CL = mask revision (stepping level) (see #00529)
  7023.     CF set on error
  7024.         AH = status (80h,86h = function not supported)
  7025. Notes:    the BIOS must save DX at startup in order to be able to support this
  7026.       call; PS/2 Models 56, 57, 90, and 95 are known to support it
  7027.     the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev)
  7028.     IBM classifies this function as optional
  7029. SeeAlso: AX=D100h,AX=DA92h,MEM 0040h:00BCh
  7030.  
  7031. (Table 00528)
  7032. Values for CPU type:
  7033.  03h    80386DX or clone
  7034.  04h    80486
  7035.  05h    Pentium
  7036.  23h    80386SX or clone
  7037.  33h    Intel i376
  7038.  43h    80386SL or clone
  7039.  A3h    IBM 386SLC
  7040.  A4h    IBM 486SLC
  7041.  
  7042. (Table 00529)
  7043. Values for stepping level:
  7044. ---i376 (type code 33h)---
  7045.  05h    A0
  7046.  08h    B
  7047. ---80386/80386DX (type code 03h)---
  7048.  03h    Intel B1 to B10, Am386DX/DXL step A
  7049.  05h    Intel D0
  7050.  08h    Intel D1/D2/E1, Am386DX/DXL step B
  7051. ---80386SL (type code 43h)---
  7052.  05h    A
  7053.  1xh    B
  7054. ---80386SX (type code 23h)---
  7055.  04h    Intel A0
  7056.  05h    Intel B, Am386SX/SXL step A1
  7057.  08h    Intel C/D1, Am386SX/SXL step B
  7058.  09h    Intel 386CX/386EX/386SXstatic step A
  7059. ---80486DX (type code 04h)---
  7060.  00h    Intel A0/A1
  7061.  01h    Intel B2 to B6
  7062.  02h    Intel C0
  7063.  03h    Intel C1
  7064.  04h    Intel D0
  7065.  10h    Intel cA2/cA3, Cx486SLC step A
  7066.  11h    Intel cB0/cB1
  7067. ---486DX2 (type code 04h)---
  7068.  02h    Am486DX2 (unknown stepping)
  7069.  32h    Intel DX2/Overdrive steps A0 to A2
  7070.  33h    Intel DX2/Overdrive step B1
  7071. ---486SX (type code 04h)---
  7072.  20h    Intel A0
  7073.  22h    Intel B0
  7074.  27h    Intel cA0
  7075.  28h    Intel cB0
  7076. ---486SL (type code 04h)---
  7077.  40h    Intel A
  7078. ---IntelSX2 (type code 04h)---
  7079.  5xh    Intel A
  7080. ---IntelDX4 (type code 04h)---
  7081.  8xh    Intel A
  7082. ---487SX (type code 04h)---
  7083.  20h    Intel A0
  7084.  21h    Intel B0
  7085. ---Pentium (type code 05h)---
  7086.  0xh    Intel P5 steps Ax (1993)
  7087.  1xh    Intel P5 steps Bx (1994)
  7088.  2xh    Intel P54C step A
  7089. ---RapidCAD (type code 03h)---
  7090.  40h    A
  7091. --------B-15CA-------------------------------
  7092. INT 15 U - PS/2 Model 95 - READ/WRITE CMOS MEMORY
  7093.     AH = CAh
  7094.     AL = function
  7095.         00h read CMOS
  7096.         Return: CL = value of CMOS location
  7097.         01h write CMOS
  7098.         CL = new value for CMOS location
  7099.     BL = CMOS location (0Eh-3Fh)
  7100. Return: CF clear if successful
  7101.         AH = 00h
  7102.     CF set on error
  7103.         AH = error code (see #00530)
  7104. Note:    writes do not update the CMOS checksum
  7105.  
  7106. (Table 00530)
  7107. Values for CMOS read/write error code:
  7108.  01h    CMOS lost power or has invalid checksum
  7109.  03h    specified location out of range (too high)
  7110.  04h    specified location out of range (too low)
  7111.  80h    unsupported function (PC)
  7112.  86h    unsupported function (XT)
  7113. --------B-15CB-------------------------------
  7114. INT 15 U - PS/2 Model 95 - RESERVED
  7115.     AH = CBh
  7116.     ???
  7117. Return: ???
  7118. --------B-15CC-------------------------------
  7119. INT 15 U - PS/2 Model 95 - RESERVED
  7120.     AH = CCh
  7121.     ???
  7122. Return: ???
  7123. --------V-15CCCC-----------------------------
  7124. INT 15 U - Toshiba laptops - VCHAD.EXE - INSTALLATION CHECK
  7125.     AX = CCCCh
  7126. Return: AX = ABCDh if installed
  7127. Note:    supported by Toshiba VGA change display utility VCHAD.EXE ver 2.90+
  7128.       older versions have the string "VCHAD" 2 bytes after the address of
  7129.       the INT 15 handler which is hooked by all versions for the SysReq key
  7130. SeeAlso: AH=85h
  7131. --------B-15CD-------------------------------
  7132. INT 15 U - PS/2 Model 95 - RESERVED
  7133.     AH = CDh
  7134.     ???
  7135. Return: ???
  7136. --------B-15CE--BL00-------------------------
  7137. INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL
  7138.     AH = CEh
  7139.     BL = 00h-0Eh arbitration level to be allocated
  7140.          0Fh-FFh reserved
  7141.     AL = option byte
  7142.         bit 7-1: reserved (0)
  7143.         bit 0: 0 = need DMA channel for arbitration level requested
  7144.            1 = no channel required for arbitration level
  7145. Return: CF set on error
  7146.         AH = status (80h,86h = function not supported)
  7147.     CF clear on success
  7148.         AL = channel number
  7149.         00h-07h channel number allocated for the arbiration level
  7150.         08h-FEh reserved
  7151.         FFh    no channel requested for arbitration level
  7152.         AH = status (see #00531)
  7153. Notes:     arbitration level 00h has the highest priority, 0Eh the lowest
  7154.      to perform a DMA transfer operation, be sure to call this function
  7155.        first, and call AH=CFh afterward.  Failure to use this function
  7156.        can cause unpredictable results.
  7157. SeeAlso: AH=CFh
  7158.  
  7159. (Table 00531)
  7160. Values for DMA arbitration status:
  7161.  00h    success
  7162.  01h    arbitration level not available
  7163.  02h    channel not available
  7164.  03h    invalid arbitration level passed
  7165. --------B-15CF-------------------------------
  7166. INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL
  7167.     AH = CFh
  7168.     BL = arbitration level to be deallocated (see AH=CEh)
  7169. Return: CF set on error
  7170.         AH = status (80h,86h = function not supported)
  7171.     CF clear on success
  7172.         AH = status
  7173.         00h success
  7174.         04h arbitration level not allocated
  7175. SeeAlso: AH=CEh
  7176. --------B-15D0-------------------------------
  7177. INT 15 - later PS/2s - RESERVED
  7178.     AH = D0h
  7179.     ???
  7180. Return: ???
  7181. ----------15D042BL00-------------------------
  7182. INT 15 R - Intel Pentium Pro BIOS UPDATE - INSTALLATION CHECK
  7183.     AX = D042h
  7184.     BL = 00h
  7185. Return: CF clear if successful
  7186.     CF set on error
  7187.     AH = status
  7188.         00h successful
  7189.         EBX:ECX = signature "INTELPEP"
  7190.         EDX = BIOS update loader version
  7191.         SI = number of 2K update blocks which can be recorded in NVRAM
  7192.         86h not implemented
  7193.     AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
  7194.         00h successful
  7195. Program: the Pentium Pro BIOS update allows the system BIOS or other software
  7196.       to install a microcode patch into the Pentium Pro processor
  7197. Notes:    this API must be called from actual real mode, not V86 mode
  7198.     at least 32K stack space must be available when this function is called
  7199. SeeAlso: AX=D042h/BL=01h,AX=D042h/BL=02h,AX=D042h/BL=03h
  7200. SeeAlso: @xxxxh:xxxxh"Intel BIOS Upgrade",MSR 00000079h
  7201. ----------15D042BL01-------------------------
  7202. INT 15 R - Intel Pentium Pro BIOS UPDATE - WRITE BIOS UPDATE AREA
  7203.     AX = D042h
  7204.     BL = 01h
  7205.     ES:DI -> microcode update block (see #00533)
  7206.     CX,DX,SI = segments of three 64K scratchpad areas for BIOS use
  7207. Return: CF clear if successful
  7208.     CF set on error
  7209.     AH = status (see #00532)
  7210.     AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
  7211.         00h successful
  7212. Notes:    a microcode update may also be initiated by a WRMSR instruction
  7213.       with ECX=0079h, EDX=00000000h, and EAX=linear address of update
  7214.       block (see #00533)
  7215.     at least 32K stack space must be available when this function is called
  7216. SeeAlso: AX=D042h/BL=00h,AX=D042h/BL=02h,AX=D042h/BL=03h,MSR 00000079h
  7217.  
  7218. (Table 00532)
  7219. Values for Pentium Pro BIOS update status:
  7220.  00h    successful
  7221.  86h    not implemented
  7222.  90h    unable to erase NVRAM device
  7223.  91h    unable to write to NVRAM device
  7224.  92h    unable to read storage
  7225.  93h    NVRAM is full
  7226.  94h    specified processor stepping is not present in system
  7227.  95h    invalid header or loader version
  7228.  96h    wrong checksum in header
  7229.  97h    processor rejected the update
  7230.  98h    the same or a more recent update is already stored
  7231.  99h    update block number was out of range
  7232.  
  7233. Format of Pentium Pro microcode update block:
  7234. Offset    Size    Description    (Table 00533)
  7235.  00h    DWORD    update header version number (currently 00000001h)
  7236.         FFFFFFFFh = unused block
  7237.  04h    DWORD    revision number of this microcode update
  7238.  08h    DWORD    update creation date, as BCD mmddyyyy (month,day,year)
  7239.  0Ch    DWORD    family/model/stepping of processor to which update applied
  7240.         (same value as returned by CPUID instruction)
  7241.  10h    DWORD    checksum (used to force sum of all 512 DWORDs of the update
  7242.         block to 00000000h)
  7243.  14h    DWORD    revision number of loader needed to install update
  7244.         (currently 00000001h)
  7245.  18h 24 BYTEs    reserved for future expansion
  7246.  30h 2000 BYTEs    encrypted microcode data
  7247. SeeAlso: MSR 00000079h,OPCODE "CPUID"
  7248. ----------15D042BL02-------------------------
  7249. INT 15 R - Intel Pentium Pro BIOS UPDATE - BIOS UPDATE CONTROL
  7250.     AX = D042h
  7251.     BL = 02h
  7252.     BH = function
  7253.         01h enable update loading at initialization time
  7254.         02h check whether update loading is enabled
  7255.     CX,DX,SI = segments of three 64K scratchpad areas for BIOS use
  7256. Return: CF clear if successful
  7257.     CF set on error
  7258.     AH = status (see #00532)
  7259.         00h successful
  7260.         BL = enabled/disabled flag
  7261.         86h not implemented
  7262.     AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
  7263.         00h successful
  7264. Notes:    this API must be called from actual real mode, not V86 mode
  7265.     at least 32K stack space must be available when this function is called
  7266.     there is no call to disable update loading due to security risks; the
  7267.       BIOS setup can disable loading
  7268. SeeAlso: AX=D042h/BL=00h,AX=D042h/BL=02h,AX=D042h/BL=03h
  7269. ----------15D042BL03-------------------------
  7270. INT 15 R - Intel Pentium Pro BIOS UPDATE - READ BIOS UPDATE AREA
  7271.     AX = D042h
  7272.     BL = 03h
  7273.     ES:DI -> buffer for microcode update block (see #00533)
  7274.     ECX = two real-mode 64K scratchpad segments (upper and lower words)
  7275.     DX = segment of 64K scratchpad area for BIOS use
  7276.     SI = zero-based index number of update block to retrieve
  7277. Return: CF clear if successful
  7278.     CF set on error
  7279.     AH = status
  7280.         00h successful
  7281.         ES:DI buffer filled with 2048-byte update block
  7282.         86h not implemented
  7283.     AL = OEM error (if AH is not 00h or 86h, otherwise undefined)
  7284.         00h successful
  7285. Program: the Pentium Pro BIOS update allows the system BIOS or other software
  7286.       to install a microcode patch into the Pentium Pro processor
  7287. Notes:    this API must be called from actual real mode, not V86 mode
  7288.     at least 32K stack space must be available when this function is called
  7289. SeeAlso: AX=D042h/BL=00h,AX=D042h/BL=01h,AX=D042h/BL=03h
  7290. --------B-15D100DX0000-----------------------
  7291. INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES
  7292.     AX = D100h
  7293.     DX = 0000h (reserved, must set to 0)
  7294. Return: BL = size of one DDT entry, in bytes
  7295.     CX = number of DDT entries
  7296.     AH = return code (see #00534)
  7297.     CF set on error
  7298.     CF clear on success
  7299. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D101h,AX=D102h,AX=D103h,AX=D104h
  7300.  
  7301. (Table 00534)
  7302. Values for return code:
  7303.  00h    success
  7304.  01h    requested DDT entry not found
  7305.  02h    DDT data not valid
  7306.  86h    function not supported
  7307. --------B-15D101-----------------------------
  7308. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER
  7309.     AX = D101h
  7310.     BX = number of requested entry (starting with 1)
  7311.     DX = 0000h (reserved, must be set to 0)
  7312.     ES:DI -> buffer to contain DDT entry (see #00535)
  7313. Return: AH = return code (see #00534)
  7314.     CF set on error
  7315.     CF clear on success
  7316.         ES:DI buffer filled with DDT entry
  7317. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D102h,AX=D104h
  7318.  
  7319. Format of Device Descriptor Table (DDT):
  7320. Offset    Size    Description    (Table 00535)
  7321.  00h    BYTE    bits 7-4: reserved (set to 0)
  7322.         bits 3-0: slot of device (0 = system board)
  7323.  01h    BYTE    bits 7-4: second interrupt for this device (0 = none)
  7324.         bits 3-0: first interrupt for this device (0 = none)
  7325.  02h    BYTE    bits 7-4: second arbitration level for this device
  7326.         bits 3-0: first arbitration level for this device
  7327.  03h    WORD    DDT indicators (see #00536)
  7328.  05h    BYTE    reserved (0)
  7329.  06h    WORD    device ID (0 = none)
  7330.  08h    WORD    starting address of first  I/O block (0 = none)
  7331.  0Ah    WORD    starting address of second I/O block (0 = none)
  7332.  OCh    WORD    starting address of third  I/O block (0 = none)
  7333.  OEh    DWORD    start of first non-system memory block (0 = none)
  7334.  12h    WORD    size of first non-system memory block (in kilobytes)
  7335.  14h    DWORD    start of second non-system memory block (0 = none)
  7336.  18h    WORD    size of second non-system memory block (in kilobytes)
  7337.  1Ah    BYTE    implementation identifier of the device
  7338.  1Bh    BYTE    implementation revision level of the device
  7339. Note:    I/O block addresses and non-system memory addresses are listed in
  7340.       ascending order in each DDT entry.
  7341.  
  7342. Bitfields for DDT indicators:
  7343. Bit(s)    Description    (Table 00536)
  7344.  15    reserved (0)
  7345.  14    second arbitration level exists
  7346.  13    first arbitration level exists
  7347.  12    serial interface is RS-422
  7348.  11    not address limited
  7349.  10    DMA channel used
  7350.  9    second arbitration level can be shared
  7351.  8    first arbitration level can be shared
  7352.  7-0    reserved (0)
  7353. --------B-15D102-----------------------------
  7354. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS
  7355.     AX = D102h
  7356.     BX = entry number at which to start searching
  7357.     CX = requested I/O port address
  7358.     DX = 0000h (reserved, must be set to 0)
  7359.     ES:DI -> buffer to contain DDT entry (see #00535)
  7360. Return: AH = return code (see #00534)
  7361.     BX = DDT entry number where I/O port was found, or total entries
  7362.          plus 1 if port was not found.
  7363.     CF set on error
  7364.     CF clear on success
  7365.         ES:DI buffer filled with DDT entry
  7366. Desc:    the DDT is searched from the specified entry for the I/O port in CX,
  7367.       and the first entry in which it is found is returned
  7368. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h,AX=D104h
  7369. --------B-15D103DX0000-----------------------
  7370. INT 15 - later PS/2s - RETURN ENTIRE DDT
  7371.     AX = D103h
  7372.     DX = 0000h (reserved, must be set to 0)
  7373.     ES:DI -> buffer to contain DDT entry (see #00535)
  7374. Return: AH = return code (see #00534)
  7375.     CF set on error
  7376.     CF clear on success
  7377.         ES:DI buffer filled with DDT entry
  7378. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D104h
  7379. --------B-15D104-----------------------------
  7380. INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID
  7381.     AX = D104h
  7382.     BX = entry number at which to start searching
  7383.     CX = requested device ID
  7384.     DX = 0000h (reserved, must be set to 0)
  7385.     ES:DI -> buffer to contain DDT entry (see #00535)
  7386. Return: AH = return code (see #00534)
  7387.     BX = DDT entry number where device ID was found, or total entries
  7388.           plus 1 if port was not found.
  7389.     CF set on error
  7390.     CF clear on success
  7391.         ES:DI buffer filled with DDT entry
  7392. Desc:    the DDT is searched from the specified entry for the device ID in CX,
  7393.       and the first entry in which it is found is returned.
  7394. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h
  7395. --------B-15D2-------------------------------
  7396. INT 15 - later PS/2s - RESERVED
  7397.     AH = D2h
  7398.     ???
  7399. Return: ???
  7400. --------B-15D3-------------------------------
  7401. INT 15 - later PS/2s - RESERVED
  7402.     AH = D3h
  7403.     ???
  7404. Return: ???
  7405. --------B-15D4-------------------------------
  7406. INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT)
  7407.     AH = D4h
  7408.     DL = logical fixed disk drive number
  7409. Return: AH = return code (see #00537)
  7410.     CF set on error
  7411.     CF clear on success
  7412.         AL = physical fixed disk drive number
  7413.  
  7414. (Table 00537)
  7415. Values for return code:
  7416.  00h    success
  7417.  01h    specified logical drive number is invalid
  7418.  80h    function not supported (on PCjr and PC)
  7419.  86h    function not supported
  7420. --------B-15D5-------------------------------
  7421. INT 15 - later PS/2s - RESERVED
  7422.     AH = D5h
  7423.     ???
  7424. Return: ???
  7425. --------B-15D600BL00-------------------------
  7426. INT 15 - later PS/2s - READ BOOT DEVICE ID
  7427.     AX = D600h
  7428.     BL = 00h
  7429.     DX = device ID
  7430. Return: CF clear if successful
  7431.         AH = 00h
  7432.     CF set on error
  7433.         AH = status (86h for function not supported)
  7434. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h,AX=D602h
  7435. --------B-15D600BL01-------------------------
  7436. INT 15 - later PS/2s - WRITE BOOT DEVICE ID
  7437.     AX = D600h
  7438.     BL = 01h
  7439.     DX = device ID
  7440. Return: CF clear on success
  7441.         AH = 00h
  7442.     CF set on error
  7443.         AH = status (86h for function not supported)
  7444. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h
  7445. --------B-15D601BL00-------------------------
  7446. INT 15 - later PS/2s - READ BOOT DEVICE KEY
  7447.     AX = D601h
  7448.     BL = 00h
  7449.     DX = device ID
  7450. Return: CF clear on success
  7451.         AH = 00h
  7452.     CF set on error
  7453.         AH = status (86h for function not supported)
  7454. SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h,AX=D602h
  7455. --------B-15D601BL01-------------------------
  7456. INT 15 - later PS/2s - WRITE BOOT DEVICE KEY
  7457.     AX = D601h
  7458.     BL = 01h
  7459.     DX = device ID
  7460. Return: CF clear on success
  7461.         AH = 00h
  7462.     CF set on error
  7463.         AH = status (86h for function not supported)
  7464. SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h
  7465. --------B-15D602-----------------------------
  7466. INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION
  7467.     AX = D602h
  7468. Return: CF clear on success
  7469.         AH = 00h
  7470.         AL = status of reference-partition boot request
  7471.         00h boot not requested
  7472.         01h boot requested
  7473.     CF set on error
  7474.         AH = status (86h for function not supported)
  7475. SeeAlso: AX=D601h/BL=00h
  7476. --------X-15D800-----------------------------
  7477. INT 15 - EISA SYSTEM ROM - READ SLOT CONFIGURATION INFORMATION
  7478.     AX = D800h
  7479.     CL = slot number (including embedded and virtual)
  7480. Return: CF clear if successful
  7481.         AH = 00h
  7482.     CF set on error
  7483.         AH = error code (80h,82h,83h,86h,87h)(see #00539)
  7484.     AL = bit flags (see #00538)
  7485.     BH = major revision level of configuration utility
  7486.     BL = minor revision level of configuration utility
  7487.     CX = checksum of configuration file
  7488.     DH = number of device functions
  7489.     DL = combined function information byte (see #00540)
  7490.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  7491. Note:    call with AL=80h if using 32-bit CS addressing mode instead of 16-bit
  7492. SeeAlso: AX=D801h,AX=D804h
  7493.  
  7494. Bitfields for EISA AL bit flags:
  7495. Bit(s)    Description    (Table 00538)
  7496.  7    set if duplicate IDs
  7497.  6    set if product ID readable
  7498.  4,5    slot type (00=expansion, 01=embedded, 10=virtual device)
  7499.  0-3    duplicate ID number if bit 7 set
  7500. SeeAlso: #00540
  7501.  
  7502. (Table 00539)
  7503. Values for EISA error code:
  7504.  80h    invalid slot number
  7505.  81h    invalid function number
  7506.  82h    EISA CMOS corrupt
  7507.  83h    empty slot
  7508.  84h    error clearing CMOS
  7509.  85h    EISA CMOS is full
  7510.  86h    invalid BIOS-FW function call
  7511.  87h    invalid system configuration
  7512.  88h    config utility version not supported
  7513.  
  7514. Bitfields for EISA combined function information byte:
  7515. Bit(s)    Description    (Table 00540)
  7516.  7    reserved
  7517.  6    slot has free-form data entries
  7518.  5    slot has port initialization entries
  7519.  4    slot has port-range entries
  7520.  3    slot has DMA entries
  7521.  2    slot has IRQ entries
  7522.  1    slot has memory entries
  7523.  0    slot has function type entries
  7524. SeeAlso: #00538
  7525. --------X-15D801-----------------------------
  7526. INT 15 - EISA SYSTEM ROM - READ FUNCTION CONFIGURATION INFORMATION
  7527.     AX = D801h
  7528.     CH = function number to read
  7529.     CL = slot number (including embedded and virtual)
  7530.     DS:SI -> 320-byte buffer for standard configuration data block
  7531. Return: CF clear if successful
  7532.         AH = 00h
  7533.         DS:SI buffer filled
  7534.     CF set on error
  7535.         AH = error code (80h-83h,86h,87h) (see #00539)
  7536.     BX destroyed
  7537. Note:    call with AL=81h if using 32-bit CS addressing mode instead of 16-bit
  7538. --------X-15D802-----------------------------
  7539. INT 15 - EISA SYSTEM ROM - CLEAR NONVOLATILE MEMORY (EISA CMOS)
  7540.     AX = D802h
  7541.     BH = EISA config utility major revision level
  7542.     BL = EISA config utility minor revision level
  7543. Return: CF clear if successful
  7544.         AH = 00h
  7545.     CF set on error
  7546.         AH = error code (84h,86h,88h) (see #00539)
  7547. Note:    call with AL=82h if using 32-bit CS addressing mode instead of 16-bit
  7548. SeeAlso: AX=D803h
  7549. --------X-15D803-----------------------------
  7550. INT 15 - EISA SYSTEM ROM - WRITE NONVOLATILE MEMORY
  7551.     AX = D803h
  7552.     CX = length of data structure (0000h = empty slot)
  7553.         includes two bytes for config file checksum
  7554.     DS:SI -> configuration data
  7555. Return: CF clear if successful
  7556.         AH = 00h
  7557.     CF set on error
  7558.         AH = error code (84h-86h) (see #00539)
  7559. Note:    call with AL=83h if using 32-bit CS addressing mode instead of 16-bit
  7560. SeeAlso: AX=D802h
  7561. --------X-15D804-----------------------------
  7562. INT 15 - EISA SYSTEM ROM - READ PHYSICAL SLOT
  7563.     AX = D804h
  7564.     CL = slot number (including embedded and virtual)
  7565. Return: CF clear if successful
  7566.         AH = 00h
  7567.     CF set on error
  7568.         AH = error code (80h,83h,86h) (see #00539)
  7569.     SI:DI = 4-byte compressed ID (DI = bytes 0&1, SI = bytes 2&3)
  7570. Note:    call with AL=84h if using 32-bit CS addressing mode instead of 16-bit
  7571. SeeAlso: AX=D800h
  7572. --------b-15D820-----------------------------
  7573. INT 15 - Compaq LTE Lite - GET ???
  7574.     AX = D820h
  7575.     DS:SI -> 17-byte buffer for ???
  7576. Return: DS:SI buffer filled (first byte is length of remaining data, unless
  7577.       it is greater than 10h, in which case the second byte is 00h and no
  7578.       other data is returned)
  7579. Note:    this function is also supported by Compaq's EISA System ROM, Contura
  7580.       486/486c/486cx and recent DESKPRO/i ROMs
  7581. SeeAlso: AX=D821h
  7582. --------b-15D821-----------------------------
  7583. INT 15 - Compaq LTE Lite - SET ???
  7584.     AX = D821h
  7585.     DS:SI -> counted string (should not be more than 16 bytes)
  7586. Return: AH = 00h
  7587. Note:    this function is also supported by Compaq's EISA System ROM, Contura
  7588.       486/486c/486cx and recent DESKPRO/i ROMs
  7589. SeeAlso: AX=D820h
  7590. --------b-15D822BL00-------------------------
  7591. INT 15 - Compaq EISA System ROM 04/08/93 - GET ???
  7592.     AX = D822h
  7593.     BL = 00h
  7594.     CX = size of buffer or 0000h to retrieve required buffer size
  7595.     DS:SI -> buffer for ??? (if CX nonzero)
  7596. Return: CF clear if successful
  7597.         AH = 00h
  7598.         DH = 08h
  7599.         CX = required buffer size to retrieve all data (if CX=0 on entry)
  7600.         DS:SI buffer filled (if CX nonzero on entry)
  7601.     CF set on error (BL nonzero)
  7602.         AH = 86h
  7603. --------b-15D823-----------------------------
  7604. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  7605.     AX = D823h
  7606.     BL = subfunction??? (00h or 80h)
  7607.     BH = ???
  7608.     DS:SI -> buffer for ??? (see #00541)
  7609. Return: CF clear if successful
  7610.         AH = 00h
  7611.         DH = 08h
  7612.         DL = ???
  7613.     CF set on error
  7614.         AH = error code
  7615.         86h BL neither 00h nor 80h
  7616.         87h ???
  7617.  
  7618. Format of Compaq EISA buffer:
  7619. Offset    Size    Description    (Table 00541)
  7620.  00h    BYTE    ???
  7621.  01h    WORD    ???
  7622.  03h    BYTE    ???
  7623.  04h    WORD    ???
  7624.  06h    WORD    ???
  7625.     ???
  7626. ----------15D824-----------------------------
  7627. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  7628.     AX = D824h
  7629.     CX = ???
  7630.     DS:SI -> ASCIZ string containing ???
  7631. Return: CF clear if successful
  7632.         AH = 00h
  7633.         CX = ???
  7634.     CF set on error
  7635.         AH = error code
  7636.         87h ??? failed
  7637.         88h ???
  7638. Note:    these functions are only available if ??? from keyboard controller
  7639.       command C0h
  7640. ----------15D825-----------------------------
  7641. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  7642.     AX = D825h
  7643.     CX = ???
  7644.     SI = ???
  7645.     DI = ???
  7646.     ???
  7647. Return: CF clear if successful
  7648.         AH = 00h
  7649.         CX = ???
  7650.     CF set on error
  7651.         AH = error code
  7652.         87h ??? failed
  7653.         88h ???
  7654.             CX = ???
  7655. Note:    these functions are only available if ??? from keyboard controller
  7656.       command C0h
  7657. ----------15D826-----------------------------
  7658. INT 15 - Compaq EISA System ROM 04/08/93 - ???
  7659.     AX = D826h
  7660.     BX = ???
  7661.     CX = size of buffer in bytes
  7662.     DS:SI -> buffer for ???
  7663.     ???
  7664. Return: CF clear if successful
  7665.         AH = 00h
  7666.         CX = ???
  7667.     CF set on error
  7668.         AH = error code
  7669.         87h ??? failed
  7670.         88h ???
  7671. Note:    these functions are only available if ??? from keyboard controller
  7672.       command C0h
  7673. --------X-15D8-------------------------------
  7674. INT 15 - EISA SYSTEM ROM - 32-bit CS ADDRESSING MODE CALLS
  7675.     AH = D8h
  7676.     AL = 80h to 84h
  7677.     other registers as appropriate for AL=00h to 04h
  7678. Return: as appropriate for AL=00h to 04h
  7679. Note:    these functions are identical to AX=D800h to D804h, except that they
  7680.       should be called when using 32-bit CS addressing mode (pointers use
  7681.       ESI rather than SI as offset) instead of 16-bit addressing mode
  7682. SeeAlso: AX=D800h,AX=D801h,AX=D802h,AX=D803h,AX=D804h
  7683. --------b-15D8-------------------------------
  7684. INT 15 - Compaq EISA System ROM 04/08/93 - 32-bit CS ADDRESSING MODE CALLS
  7685.     AH = D8h
  7686.     AL = A0h to A6h
  7687.     other registers as appropriate for AL=20h to 26h
  7688. Return: as appropriate for AL=20h to 26h
  7689. Note:    these functions are identical to AX=D820h to D826h, except that they
  7690.       should be called when using 32-bit CS addressing mode
  7691. ----------15DA-------------------------------
  7692. INT 15 U - AMI PCI BIOS v1.00.05.AX1 - ???
  7693.     AH = DAh
  7694.     AL = function (00h-08h,12h,14h,15h,19h,88h-8Eh,92h,99h)
  7695.     other registers vary by function
  7696. Return: CF clear if successful
  7697.         varies by function
  7698.     CF set on error
  7699.         AH = error code (86h unsupported [sub]function)
  7700. Note:    functions not listed above always return CF set and AH=86h; in the
  7701.       examined BIOS, functions 02h-04h,06h-07h,89h-8Bh, and 8Dh also
  7702.       always return CF set and AH=86h
  7703. SeeAlso: AX=DA00h,AX=DA01h,AX=DA88h,AX=DA99h,AX=DB00h
  7704. --------b-15DA00-----------------------------
  7705. INT 15 U - AMI PCI BIOS - ???
  7706.     AX = DA00h
  7707.     CL = subfunction
  7708.         00h ???
  7709.         01h ???
  7710.         02h get ???
  7711.     ???
  7712. Return: CF clear if successful
  7713.         ???
  7714.     CF set on error
  7715.         AH = error code (86h unsupported subfunction)
  7716. Note:    in the v1.00.05.AX1 BIOS, subfunctions 00h and 01h always return
  7717.       failure
  7718. SeeAlso: AX=DA01h
  7719. --------b-15DA01-----------------------------
  7720. INT 15 U - AMI PCI BIOS - CPU SPEED CONTROL
  7721.     AX = DA01h
  7722.     CL = subfunction (00h-02h)
  7723.         00h set low CPU speed
  7724.         01h set high CPU speed
  7725.         02h get current CPU speed
  7726. Return: CF clear if successful
  7727.         AH = current/new CPU speed (00h low, 01h high)
  7728.         AL = ??? (00h)
  7729.     CF set on error
  7730.         AH = error code (86h unsupported subfunction)
  7731. Notes:    in the v1.00.05.AX1 BIOS, subfunctions 00h and 01h are NOPs in both
  7732.       protected and V86 modes due to a test of MSW bit 0
  7733.     setting the CPU speed also generates the same audible signals generated
  7734.       when manually switching speeds with Ctrl-Alt-Gray- and Ctrl-Alt-Gray+
  7735. BUG:    the BIOS apparently intends to return CF set if ???, but fails to use
  7736.       a different exit path in that case, resulting in CF clear
  7737. ----------15DA05-----------------------------
  7738. INT 15 U - AMI PCI BIOS - GET ??? AND BIOS REVISION STRINGS
  7739.     AX = DA05h
  7740.     ES:SI -> 8-byte buffer for ??? and BIOS revision strings
  7741. Return: CF clear
  7742.     ES:SI buffer filled
  7743.     AL = 00h
  7744.     CX = ??? (0000h)
  7745. Notes:    for BIOS v1.00.05.AX1, the ??? string is "IDNO" and the BIOS revision
  7746.       string is "AX1 "
  7747. SeeAlso: AX=DA15h,AX=DB04h
  7748. ----------15DA08-----------------------------
  7749. INT 15 U - AMI PCI BIOS - ???
  7750.     AX = DA08h
  7751.     ???
  7752. Return: CF clear if successful
  7753.         ???
  7754.     CF set on error
  7755.         AH = error code (86h unsupported subfunction)
  7756. Note:    in the examined v1.00.05.AX1 BIOS, this call always returns failure
  7757. ----------15DA12-----------------------------
  7758. INT 15 U - AMI PCI BIOS - v1.00.05.AX1 - ???
  7759.     AX = DA12h
  7760.     CL = subfunction
  7761.         00h ???
  7762.         01h    ???
  7763.         02h get ???
  7764.         03h ???
  7765.         04h ???
  7766.     ???
  7767. Return: CF clear if successful
  7768.         ???
  7769.     CF set on error
  7770.         AH = error code (86h unsupported subfunction)
  7771. Desc:    ??? performs various manipulations on system chipset registers
  7772. Notes:    subfunctions 00h and 01h are NOPs in protected and V86 modes due to
  7773.       a test of MSW bit 0
  7774.     subfunctions 00h-02h always return success
  7775. ----------15DA14-----------------------------
  7776. INT 15 U - AMI PCI BIOS - GET/SET ???
  7777.     AX = DA14h
  7778.     CL = subfunction
  7779.         00h read
  7780.         01h write
  7781.         DH = new value for ??? (00h-02h)
  7782.     DL = index of ??? (00h-03h, but not range-checked)
  7783.     ???
  7784. Return: CF clear if successful
  7785.         DH = current value of ??? if reading
  7786.     CF set on error
  7787.         AH = error code (86h unsupported subfunction)
  7788. Note:    the values for indexes 00h and 01h are stored in CMOS RAM location 19h,
  7789.       and the values for 02h and 03h are stored in location 36h
  7790. BUG:    the v1.00.05.AX1 BIOS range-checks DH on subfunction 00h instead of
  7791.       subfunction 01h, even though DH is never used by subfunction 00h
  7792. ----------15DA15-----------------------------
  7793. INT 15 U - AMI PCI BIOS - GET ??? AND BIOS REVISION STRINGS
  7794.     AX = DA15h
  7795.     ES:DI -> 8-byte buffer for ??? and BIOS revision strings
  7796. Return: CF clear
  7797.     ES:DI buffer filled
  7798.     AL = 00h
  7799. Note:    for BIOS v1.00.05.AX1, the ??? string is "IDNO" and the BIOS revision
  7800.       string is "AX1 "
  7801. SeeAlso: AX=DA05h,AX=DB04h
  7802. ----------15DA19-----------------------------
  7803. INT 15 U - AMI PCI BIOS - GET/SET ???
  7804.     AX = DA19h
  7805.     CL = subfunction
  7806.         00h get first ???
  7807.         01h get second ???
  7808.         02h set first ???
  7809.         BX = ???
  7810.         DX = ???
  7811.         03h set second ???
  7812.         BX = ???
  7813.         DX = ???
  7814. Return: CF clear if successful
  7815.         AX = 0000h
  7816.         BX,DX = ??? (subfunctions 00h and 01h only)
  7817.     CF set on error
  7818.         AH = error code (86h unsupported subfunction)
  7819. Note:    the first ??? is stored in CMOS RAM locations 1Bh-1Eh, the second in
  7820.       locations 1Fh-22h in the v1.00.05.AX1 BIOS
  7821. --------b-15DA20-----------------------------
  7822. INT 15 U - AMI PCI BIOS v1.00.12.AX1T - CMOS RAM BITFIELD MANIPULATION
  7823.     AX = DA20h
  7824.     BL = subfunction
  7825.         00h set CMOS data field
  7826.         BH = CMOS data field number (00h-4Dh)
  7827.         CH = new value for bitfield (in lowest bits of register)
  7828.         01h read CMOS data field
  7829.         BH = CMOS data field number (00h-4Dh)
  7830.         Return: CH = value of bitfield
  7831.             CL = mask of valid bits
  7832.         Note:    both CL/CH shifted to move valid bits into lowest pos
  7833.         02h set CMOS byte
  7834.         CL = CMOS RAM address (00h-7Fh)
  7835.         CH = new value for CMOS byte
  7836.         03h get CMOS byte
  7837.         CL = CMOS RAM address (00h-7Fh)
  7838.         Return: CH = value of CMOS byte
  7839.         04h update CMOS checksums
  7840.         Note:    sets 2Eh/2Fh to checksum of 10h-2Dh and 7Eh/7Fh to
  7841.               checksum of 48h-7Dh
  7842.         05h verify CMOS checksums
  7843.         Return:    CF clear if checksums OK
  7844.                 AH = 00h
  7845.             CF set if checksum mismatch
  7846.                 AH = 01h
  7847. Return: CF clear if successful
  7848.         AH = 00h
  7849.     CF set on error
  7850.         AH = error code (86h unsupported function/data field)
  7851. Notes:    this function was not supported by the v1.00.05.AX1 BIOS, but had been
  7852.       added by 1.00.12.AX1T
  7853.     after using subfunctions 00h or 02h, the application must call
  7854.       subfunction 04h to update the checksums to prevent an error the next
  7855.       time the system is booted
  7856.  
  7857. (Table 00542)
  7858. Values for AMI BIOS v1.00.12.AX1T CMOS bitfield identifier:
  7859.  ID    address    bit(s)    contents
  7860.  00h    1Ah    7-6
  7861.  01h    1Dh    7-6
  7862.  02h    6Eh    1
  7863.  03h    77h    0
  7864.  04h    77h    1
  7865.  05h    77h    2
  7866.  06h    77h    3
  7867.  07h    77h    5
  7868.  08h    77h    6
  7869.  09h    77h    7
  7870.  0Ah    78h    7    power management enabled???
  7871.  0Bh    78h    6
  7872.  0Ch    10h    7-4    first floppy drive type
  7873.  0Dh    10h    3-0    second floppy drive type
  7874.  0Eh    11h    7
  7875.  0Fh    20h    4-0    selected language for error messages/setup utility
  7876.  10h    11h    2-1
  7877.  11h    11h    4
  7878.  12h    11h    0
  7879.  13h    11h    3
  7880.  14h    13h    7
  7881.  15h    13h    6-5
  7882.  16h    13h    4-2
  7883.  17h    19h    7
  7884.  18h    19h    6
  7885.  19h    19h    5
  7886.  1Ah    19h    4
  7887.  1Bh    1Eh    2-0
  7888.  1Ch    1Bh    7-6
  7889.  1Dh    1Ch    7
  7890.  1Eh    1Ch    3
  7891.  1Fh    1Ah    5-4
  7892.  20h    1Dh    5-4
  7893.  21h    1Bh    5-4
  7894.  22h    1Ch    6
  7895.  23h    1Ch    2
  7896.  24h    1Ah    3-2
  7897.  25h    1Dh    3-2
  7898.  26h    1Bh    3-2
  7899.  27h    1Ch    5
  7900.  28h    1Ch    1
  7901.  29h    1Ah    1-0
  7902.  2Ah    1Dh    1-0
  7903.  2Bh    1Bh    1-0
  7904.  2Ch    1Ch    4
  7905.  2Dh    1Ch    0
  7906.  2Eh    50h    7-0
  7907.  2Fh    51h    7-0
  7908.  30h    52h    7-0
  7909.  31h    53h    7-0
  7910.  32h    60h    0
  7911.  33h    60h    0
  7912.  34h    60h    0
  7913.  35h    60h    0
  7914.  36h    60h    0
  7915.  37h    60h    0
  7916.  38h    60h    1
  7917.  39h    61h    7
  7918.  3Ah    60h    2
  7919.  3Bh    61h    6-4
  7920.  3Ch    61h    2-0
  7921.  3Dh    60h    7-6
  7922.  3Eh    60h    5-4
  7923.  3Fh    78h    5-4
  7924.  40h    6Eh    5
  7925.  41h    1Eh    3
  7926.  42h    6Eh    0
  7927.  43h    6Eh    2
  7928.  44h    6Fh    1-0
  7929.  45h    6Fh    1-0
  7930.  46h    28h    4-2
  7931.  47h    28h    7-5
  7932.  48h    6Eh    4
  7933.  49h    6Eh    3
  7934.  4Ah    76h    7-0
  7935.  4Bh    77h    4
  7936.  4Ch    11h    6
  7937.  4Dh    1Fh    7-0
  7938. ----------15DA88-----------------------------
  7939. INT 15 U - AMI PCI BIOS - GET EXTENDED MEMORY SIZE
  7940.     AX = DA88h
  7941. Return: CF clear (successful)
  7942.     AX = 0000h
  7943.     CL:BX = extended memory size in KBytes
  7944. SeeAlso: AH=88h
  7945. ----------15DA8C-----------------------------
  7946. INT 15 U - AMI PCI BIOS - GET BIOS AND CHIPSET IDENTIFICATION
  7947.     AX = DA8Ch
  7948.     CL = subfunction
  7949.         00h get BIOS version string
  7950.         ES:DI -> 12-byte buffer for version string
  7951.         01h get chipset identification
  7952.         BL = what to retrieve
  7953.             (00h host/PCI bridge,01h motherboard chipset)
  7954.         ES:DI -> 12-byte buffer for chipset identification (see #00543)
  7955. Return: CF clear if successful
  7956.         ES:DI buffer filled
  7957.     CF set on error
  7958.         AH = error code (86h unsupported subfunction)
  7959. Notes:    the v1.00.05.AX1 BIOS returns "1.00.05.AX1 " as its version string
  7960.     subfunction 01h returns the five bytes read from the PCI configuration
  7961.       registers 00h-05h (see #00878), padded to 12 bytes with NULs
  7962. SeeAlso: AX=DB04h,PORT C000h"Neptune"
  7963.  
  7964. Format of AMI PCI BIOS chipset identification:
  7965. Offset    Size    Description    (Table 00543)
  7966.  00h    WORD    vendor ID (see #00732 at AX=B102h)
  7967.         8086h = Intel
  7968.  02h    WORD    device ID
  7969.         0484h (BL=01h)
  7970.         04A3h (BL=00h)
  7971.  04h    BYTE    low byte of PCI Command Register
  7972.  05h  7 BYTEs    unused (00h)
  7973. ----------15DA8E-----------------------------
  7974. INT 15 U - AMI PCI BIOS - ???
  7975.     AX = DA8Eh
  7976.     ???
  7977. Return: CF clear if successful
  7978.         ???
  7979.     CF set on error
  7980.         AH = error code (86h unsupported subfunction)
  7981. Note:    in the    v1.00.05.AX1 BIOS, this call always returns failure
  7982. ----------15DA92-----------------------------
  7983. INT 15 U - AMI PCI BIOS - GET CPU TYPE AND SPEED
  7984.     AX = DA92h
  7985. Return: CF clear (successful)
  7986.     AL = CPU stepping (see also #00529 at INT 15/AH=C9h)
  7987.     AH = CPU model
  7988.     BL = CPU family (05h = Pentium, etc.)
  7989.     CX = external clock speed in MHz (BCD)
  7990.         (0040h,0050h,0060h,0066h are possible return values on my
  7991.           Pentium with the Intel "Neptune" chipset)
  7992.     EAX high word destroyed
  7993. Note:    90 MHz and faster Pentium CPUs can be configured to run at varying
  7994.       multiples of the external clock speed, i.e. a typical 90 MHz Pentium
  7995.       system will run the motherboard at 60 MHz (my 90 MHz Pentium returns
  7996.       0060h in CX)
  7997. SeeAlso: AH=C9h
  7998. ----------15DA99-----------------------------
  7999. INT 15 U - AMI PCI BIOS - GET/SET ??? FLAG
  8000.     AX = DA99h
  8001.     CL = subfunction
  8002.         00h check if ???
  8003.         01h set ??? flag
  8004.         02h clear ??? flag
  8005. Return: CF clear if successful
  8006.         AH = ??? (00h,01h)
  8007.         AL = 00h
  8008.     CF set on error
  8009.         AH = error code (86h unsupported subfunction)
  8010. Note:    the flag is stored in bit 0 of CMOS RAM location 2Ch for BIOS
  8011.       v1.00.05.AX1
  8012. --------b-15DB00-----------------------------
  8013. INT 15 U - AMI BIOS - Flash ROM - READ FLASH BIOS
  8014.     AX = DB00h
  8015.     DS:SI -> parameter block (see #00544)
  8016.     ES:DI -> buffer for copied information
  8017. Return: CF clear if successful
  8018.     CF set on error
  8019.         AH = status (86h if not implemented)
  8020.     DS,ES destroyed, possibly other registers
  8021. Note:    used by FMUP.EXE, Intel's Flash Memory Update utility
  8022. SeeAlso: AH=DAh,AX=DB01h,AX=DB04h
  8023.  
  8024. Format of AMI BIOS Flash ROM parameter block:
  8025. Offset    Size    Description    (Table 00544)
  8026.  00h 32 BYTEs    ASCIZ description of the file's contents
  8027.  20h    BYTE    Logical area type (see #00545)
  8028.  21h    DWORD    logical area size (overall size of area)
  8029.  25h    BYTE    flag: load from file (FF=yes, 00=no)
  8030.  26h    BYTE    flag: reboot after update (FF=yes, 00=no)
  8031.  27h    BYTE    flag: update entire image (FF=yes, 00=no)
  8032.  28h 24    BYTEs    ASCIZ logical area name (cooresponds to offset 20)
  8033.         "System BIOS"
  8034.         "Logo Data Area", etc.
  8035.  40h 15 BYTEs    ASCIZ time stamp string: MM/DD/YY-HH:MM
  8036.  4Fh    BYTE    checksum for this header (sum of all bytes except this one)
  8037.         if checksum would be 00h,01h, or FFh, it is set to 2Ah
  8038.  50h    DWORD    this file's starting address (offset in image)
  8039.  54h    DWORD    size of image chunk in this file
  8040.  58h    BYTE    logical area type - same as offset 20h
  8041.  59h    BYTE    flag: last file in chain (FF=yes, 00=no)
  8042.  5Ah  6 BYTEs    ASCIZ signature "FLASH"
  8043.  60h 16 BYTEs    ASCIZ filename of next file in chain
  8044.  70h 16 BYTEs    ASCIZ BIOS reserved string (usually version #)
  8045. Notes:    this block is identical in format to the 128-byte header on an AMI
  8046.       BIOS Update file
  8047.     for AX=DB00h, the following fields must be specified: 50h,54h,58h;
  8048.       the fields at offset 20h and 5Ah should also be set if possible
  8049.     the fields at offsets 40h and 70h will be set on return, if available
  8050. SeeAlso: #00546
  8051. --------b-15DB01-----------------------------
  8052. INT 15 U - AMI BIOS - Flash ROM - GET BIOS SUBSYSTEM INFORMATION
  8053.     AX = DB01h
  8054.     CL = BIOS subsystem information identifier (see #00545)
  8055. Return: CF clear if successful
  8056.         AX = 0000h
  8057.         ES:DI -> 56-byte record describing subsystem (see #00546)
  8058.     CF set on error
  8059.         AH = status
  8060.         01h nonexistent subsystem
  8061.         86h function not supported
  8062.         AL = 00h
  8063. Note:    used by FMUP.EXE, Intel's Flash Memory Update utility
  8064. SeeAlso: AX=DB00h,AX=DB02h
  8065.  
  8066. (Table 00545)
  8067. Values for AMI BIOS subsystem identifier:
  8068.  00h    recovery code
  8069.  01h    system BIOS
  8070.  02h    PCI configuration data
  8071.  03h    OEM logo data area (see #00547)
  8072.  04h    system BIOS/Language Set (one system)
  8073.     configuration utility (another system)
  8074. SeeAlso: #00546
  8075.  
  8076. Format of AMI BIOS subsystem information:
  8077. Offset    Size    Description    (Table 00546)
  8078.  00h    BYTE    subsystem identifier/logical area type (see #00545)
  8079.  01h    DWORD    subsystem (FlashROM page) size in bytes
  8080.  05h    BYTE    flag: loadable from file (FFh=yes)
  8081.  06h    BYTE    flag: reboot after update (FFh=yes)
  8082.  07h    BYTE    flag: update entire image (FFh=yes)
  8083.  08h 24 BYTEs    subsystem/logical area name
  8084.  20h    BYTE    subsystem identifier???
  8085.  21h    BYTE    flag: reprogrammable if FFh
  8086.  22h    BYTE    ??? (01h,02h seen)
  8087.  23h  5 BYTEs    ??? (apparently always 00h)
  8088.  28h 16 BYTEs    BIOS reserved string (usually version number)
  8089. SeeAlso: #00544
  8090.  
  8091. Format of AMI OEM Logo data area:
  8092. Offset    Size    Description    (Table 00547)
  8093.  00h  8 BYTEs    signature
  8094.         "TEXTLOGO" if text-mode OEM logo
  8095.         8 DUP (FFh) if unused
  8096.  08h    WORD    offset of logo font definition table
  8097.  0Ah    WORD    offset of logo data
  8098.  0Ch    WORD    size of logo font table in words
  8099.  0Eh    WORD    offset of upper left corner of logo in video page
  8100.  10h    WORD    width of logo
  8101.  12h    WORD    height of logo
  8102.  14h    BYTE    reserved???
  8103.  var    var    logo font definition (16 bytes per character)
  8104.  var    var    logo data as character/attribute pairs
  8105. Note:    the attribute for the logo characters specifies which font will be used
  8106.       for that character.  If bit 3 is cleared, the normal system font is
  8107.       used; if bit 3 is set, the logo font is used, with screen colors
  8108.       adjusted to match the corresponding non-bright attribute for the
  8109.       system font
  8110. SeeAlso: #00545,#00546
  8111. --------b-15DB02-----------------------------
  8112. INT 15 U - AMI BIOS - Flash ROM - GET SIZE OF FLASH ROM PROGRAMMING CODE
  8113.     AX = DB02h
  8114. Return: CF clear
  8115.     AX = 0000h
  8116.     BX = size of ROM programming code in bytes
  8117. Note:    used by FMUP.EXE, Intel's Flash Memory Update utility
  8118. SeeAlso: AX=DB00h,AX=DB03h
  8119. --------b-15DB03-----------------------------
  8120. INT 15 U - AMI BIOS - Flash ROM - GET FLASH ROM PROGRAMMING CODE
  8121.     AX = DB03h
  8122.     DS:SI -> ???
  8123.     ES:DI -> buffer for Flash ROM programming code
  8124.     BX = ???
  8125.     DX = ???
  8126. Return: CF clear if successful
  8127.         AH = ???
  8128.         BX = ???
  8129.         DX = ???
  8130.     CF set on error
  8131.         AH = error code
  8132. Notes:    the entry point for the copied code (which is fully relocatable) is
  8133.       the very first byte (see #00548)
  8134.     used by FMUP.EXE, Intel's Flash Memory Update utility
  8135. SeeAlso: AX=DB00h,AX=DB02h
  8136.  
  8137. (Table 00548)
  8138. Call AMI BIOS ??? code with:
  8139.     AL = function
  8140.         00h erase Flash ROM block
  8141.         CX = ???
  8142.             bit 8: address line A16 inverted
  8143.         ???
  8144.         01h program new data into Flash ROM
  8145.         ???
  8146.         02h perform cold reboot
  8147.     DS:SI -> ??? (see #00549)
  8148.     ES:DI -> ???
  8149. Return: AH = status
  8150.         00h successful
  8151.         01h invalid function
  8152.         02h ???
  8153.         03h ???
  8154.         04h ???
  8155. Note:    DS:SI and ES:DI are ignored for function 02h
  8156.  
  8157. Format of AMI BIOS Flash ROM programming parameters:
  8158. Offset    Size    Description    (Table 00549)
  8159.  00h 32 BYTEs    ???
  8160.  20h    BYTE    BIOS section number
  8161.  21h    DWORD    length of BIOS code/data in bytes
  8162.  25h 43 BYTEs    ???
  8163.  50h    DWORD    ???
  8164.  54h 44 BYTEs    ???
  8165. SeeAlso: #00548
  8166. --------b-15DB04-----------------------------
  8167. INT 15 U - AMI BIOS - Flash ROM - GET BIOS REVISION
  8168.     AX = DB04h
  8169. Return: CF clear if supported
  8170.         BL:BH:DL:DH = BIOS revision string
  8171.         (e.g. 'AX1 ' for v1.00.05.AX1, 'AV0M' for v1.00.03.AV0M)
  8172.         CL = flag: DH valid?
  8173.         00h ignore DH; ignore DL as well if 20h (space)
  8174.         01h ignore DH if 20h (space)
  8175.         CH = BIOS status
  8176.         00h normal mode
  8177.         01h ROM recovery mode
  8178.         AL = ??? (02h)
  8179. Note:    used by FMUP.EXE, Intel's Flash Memory Update utility
  8180. SeeAlso: AX=DA05h,AX=DA15h,AX=DA8Ch,AX=DB00h,AX=DB03h
  8181. --------Q-15DE00-----------------------------
  8182. INT 15 - DESQview - GET PROGRAM NAME
  8183.     AX = DE00h
  8184. Return: AX = offset into DESQVIEW.DVO of program most recently selected from
  8185.           the "Switch Windows" menu (see #00550)
  8186. Note:    always returns AX=0000h under DESQview/X
  8187. SeeAlso: AX=DE07h
  8188.  
  8189. Format of program entry in DESQVIEW.DVO:
  8190. Offset    Size    Description    (Table 00550)
  8191.  00h    BYTE    length of name (FFh if end of file)
  8192.  01h  N BYTEs    name
  8193.       2 BYTEs    keys to invoke program (second = 00h if only one key used)
  8194.     BYTE    program type
  8195.         00h normal program
  8196.         04h divider
  8197.         80h Delete a Program
  8198.         81h Change a Program
  8199.     WORD    ??? apparently always 0000h
  8200. --------Q-15DE01-----------------------------
  8201. INT 15 - DESQview - UPDATE "OPEN WINDOW" MENU
  8202.     AX = DE01h
  8203. Return: nothing
  8204. Notes:    reads DESQVIEW.DVO, disables Open menu if file not in current directory
  8205.     NOP for DESQview/X
  8206. --------Q-15DE02-----------------------------
  8207. INT 15 - DESQview 1.x only - SET ??? FLAG FOR CURRENT WINDOW
  8208.     AX = DE02h
  8209. Return: nothing
  8210. Note:    this call is a NOP in DV 2.x
  8211. SeeAlso: AX=DE03h
  8212. --------Q-15DE03-----------------------------
  8213. INT 15 - DESQview 1.x only - GET ??? FOR CURRENT WINDOW
  8214.     AX = DE03h
  8215. Return: AX = ??? for current window
  8216.     BX = ??? for current window
  8217. Note:    this call is a NOP in DV 2.x
  8218. SeeAlso: AX=DE02h
  8219. --------Q-15DE04-----------------------------
  8220. INT 15 - DESQview - GET AVAILABLE COMMON MEMORY
  8221.     AX = DE04h
  8222. Return: BX = bytes of common memory available
  8223.     CX = largest block available
  8224.     DX = total common memory in bytes
  8225. SeeAlso: AX=DE05h,AX=DE06h
  8226. --------Q-15DE05-----------------------------
  8227. INT 15 - DESQview - GET AVAILABLE CONVENTIONAL MEMORY
  8228.     AX = DE05h
  8229. Return: BX = KB of memory available
  8230.     CX = largest block available
  8231.     DX = total conventional memory in KB
  8232. SeeAlso: AX=DE04h,AX=DE06h
  8233. --------Q-15DE06-----------------------------
  8234. INT 15 - DESQview - GET AVAILABLE EXPANDED MEMORY
  8235.     AX = DE06h
  8236. Return: BX = KB of expanded memory available
  8237.     CX = largest block available
  8238.     DX = total expanded memory in KB
  8239. SeeAlso: AX=DE04h,AX=DE05h
  8240. --------Q-15DE07-----------------------------
  8241. INT 15 - DESQview - "APPNUM" - GET CURRENT PROGRAM'S NUMBER
  8242.     AX = DE07h
  8243. Return: AX = number of program as it appears on the "Switch Windows" menu
  8244. Note:    this API call may be made from a hardware interrupt handler
  8245. SeeAlso: AX=DE00h
  8246. --------Q-15DE08-----------------------------
  8247. INT 15 - DESQview - GET ???
  8248.     AX = DE08h
  8249. Return: AX = 0000h if ??? is not set to the current task
  8250.          0001h if ??? is set to the current task
  8251. --------Q-15DE09-----------------------------
  8252. INT 15 - DESQview - UNIMPLEMENTED
  8253.     AX = DE09h
  8254. Return: nothing (NOP in DV 1.x and 2.x)
  8255. --------Q-15DE0A-----------------------------
  8256. INT 15 - DESQview v2.00+ - "DBGPOKE" - DISPLAY CHARACTER ON STATUS LINE
  8257.     AX = DE0Ah
  8258.     BL = character
  8259. Return: character displayed, next call will display in next position (which
  8260.     wraps back to the start of the line if off the right edge of screen)
  8261. Notes:    displays character on bottom line of *physical* screen, regardless
  8262.       of current size of window (even entirely hidden)
  8263.     does not know about graphics display modes, just pokes the characters
  8264.       into display memory
  8265.     this API call may be made from a hardware interrupt handler
  8266. SeeAlso: AX=1003h
  8267. --------Q-15DE0B-----------------------------
  8268. INT 15 - DESQview v2.00+ - "APILEVEL" - DEFINE MINIMUM API LEVEL REQUIRED
  8269.     AX = DE0Bh
  8270.     BL = API level minor version number
  8271.     BH = API level major version number
  8272. Return: AX = maximum API level (AH = major, AL = minor)
  8273. Notes:    if the requested API level is greater than the version of DESQview, a
  8274.       "You need a newer version" error window is popped up
  8275.     the API level defaults to 1.00, and is inherited by child tasks
  8276. --------Q-15DE0C-----------------------------
  8277. INT 15 - DESQview v2.00+ - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
  8278.     AX = DE0Ch
  8279.     BX = number of bytes
  8280. Return: ES:DI -> allocated block or 0000h:0000h (DV 2.26+)
  8281. Note:    use SETERROR (AX=DE15h) to avoid a user prompt if there is insufficient
  8282.       system memory
  8283. SeeAlso: AX=1001h,AX=102Eh,AX=DE0Dh,AX=DE15h,AX=DE19h
  8284. --------Q-15DE0D-----------------------------
  8285. INT 15 - DESQview v2.00+ - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
  8286.     AX = DE0Dh
  8287.     ES:DI -> previously allocated block
  8288. Return: nothing
  8289. SeeAlso: AX=1002h,AX=DE0Ch
  8290. --------Q-15DE0E-----------------------------
  8291. INT 15 - DESQview v2.00+ - "FINDMAIL" - FIND MAILBOX BY NAME
  8292.     AX = DE0Eh
  8293.     ES:DI -> name to find (see #00551)
  8294.     CX = length of name
  8295. Return: BX = 0000h not found
  8296.          0001h found
  8297.         DS:SI = object handle
  8298. SeeAlso: AH=12h/BH=11h,AH=12h/BH=12h"GETNAME"
  8299.  
  8300. (Table 00551)
  8301. Values for special DESQview mailbox names:
  8302.  "COM1" ... "COM4"    RBcomm using COM1 ... COM4
  8303.  "DESQview/X Help Engine"
  8304.  "DESQview/X Network Server"  Network Manager
  8305.  "DESQview X Server0"    X-Windows server
  8306.  "DESQview X Server7"    X-Windows printing service
  8307.  "INBOX"        DESQview/X LPD requests
  8308.  "OUTBOX"        DESQview/X LPD responses
  8309.  "WAITBOX"        semaphore to synchronize DESQview/X LPD communications
  8310.  "_DVNM_"        DV/X v1.10 network manager
  8311. --------Q-15DE0F-----------------------------
  8312. INT 15 - DESQview v2.00+ - ENABLE DESQview EXTENSIONS
  8313.     AX = DE0Fh
  8314. Return: AX and BX destroyed (seems to be bug, weren't saved&restored)
  8315. Notes:    sends a manager stream with opcodes AEh, BDh, and BFh to task's window
  8316.     enables an additional mouse mode
  8317. --------Q-15DE10-----------------------------
  8318. INT 15 - DESQview v2.00+ - "PUSHKEY" - PUT KEY INTO KEYBOARD INPUT STREAM
  8319.     AX = DE10h
  8320.     BH = scan code
  8321.     BL = character
  8322. Return: nothing
  8323. Notes:    a later read will get the keystroke as if it had been typed by the user
  8324.     multiple pushes are read last-in first-out
  8325.     if a script exists for the pushed key in the current application, the
  8326.       script will be executed
  8327.     early copies of DV 2.00 destroy AX, BX, ES, and DI
  8328. SeeAlso: INT 16/AH=05h
  8329. --------Q-15DE11BL00-------------------------
  8330. INT 15 - DESQview v2.00+ - "JUSTIFY" - EN/DISABLE AUTOM. WINDOW JUSTIFICATION
  8331.     AX = DE11h
  8332.     BL = 00h      viewport will not move automatically
  8333.          nonzero  viewport will move to keep cursor visible (default)
  8334. Return: nothing
  8335. --------Q-15DE12BX0000-----------------------
  8336. INT 15 - DESQview v2.01+ - "CSTYLE" - SET "C"-COMPATIBLE CONTROL CHAR INTERPRET
  8337.     AX = DE12h
  8338.     BX = 0000h    select normal style (linefeed only moves down)
  8339.          nonzero  select C style (linefeed moves to start of next line)
  8340. Return: nothing
  8341. Note:    set on a per-task basis, and inherited from the parent task
  8342. --------Q-15DE13-----------------------------
  8343. INT 15 - DESQview v2.20+ - "GETCRIT" - GET CRITICAL NESTING COUNT
  8344.     AX = DE13h
  8345. Return: BX = number of calls to BEGINC or ENTERC
  8346.           (see INT 15/AX=101Bh,INT 15/AX=DE1Ch) without matching ENDC
  8347.           (see INT 15/AX=101Ch)
  8348. Note:    this API call may be made from within a hardware interrupt handler
  8349. SeeAlso: AX=101Bh,AX=101Ch,AX=DE1Bh,AX=DE1Ch
  8350. --------Q-15DE14-----------------------------
  8351. INT 15 - DESQview v2.20+ - GET OBJECT TYPE
  8352.     AX = DE14h
  8353.     ES:DI -> object
  8354. Return: BL = 00h not an object
  8355.          08h window or task
  8356.          09h mailbox
  8357.          0Ah keyboard
  8358.          0Bh timer
  8359.          0Ch objectq
  8360.          0Fh pointer
  8361.          10h panel
  8362. SeeAlso: AX=1016h
  8363. --------Q-15DE15-----------------------------
  8364. INT 15 - DESQview v2.20+ - SET ERROR HANDLING
  8365.     AX = DE15h
  8366.     BL = error handling mode
  8367.         00h post system error on all error conditions
  8368.         01h return carry flag set on calls to ADDTO, SUBFROM, and WRITE
  8369.         messages sent to mailboxes which fail due to lack of system
  8370.         or common memory
  8371.         02h (v2.26+) same as 01h, but also return null pointer for GETMEM
  8372.         calls which fail due to lack of system memory
  8373. Return: nothing
  8374. SeeAlso: AX=DE0Ch,AX=DE16h
  8375. --------Q-15DE16-----------------------------
  8376. INT 15 - DESQview v2.20+ - GET ERROR HANDLING
  8377.     AX = DE16h
  8378. Return: BL = current mode
  8379.         00h always post system error
  8380.         01h return carry flag set on failed mailbox writes
  8381.         02h return CF set on failed mailbox writes and NULL on failed
  8382.         GETMEM calls
  8383. SeeAlso: AX=DE15h
  8384. --------Q-15DE17-----------------------------
  8385. INT 15 - DESQview v2.20-2.25 - reserved
  8386.     AX = DE17h
  8387. Return: pops up "Programming error" window
  8388. Note:    AX = 1117h is NOT identical to this call under DESQview 2.20 thru 2.25
  8389. SeeAlso: AX=1117h
  8390. --------Q-15DE17-----------------------------
  8391. INT 15 - DESQview v2.26+ - "ASSERTMAP" - GET/SET MAPPING CONTEXT
  8392.     AX = DE17h
  8393.     BX = function
  8394.         0000h   get current mapping context without setting
  8395.         nonzero set new mapping context to BX
  8396. Return: BX = mapping context in effect before call
  8397. Notes:    mapping contexts determine conventional-memory addressability; setting
  8398.       a mapping context ensures that the associated program and data areas
  8399.       are in memory for access.  Usable by drivers, TSRs and shared
  8400.       programs.
  8401.     caller need not be running under DESQview
  8402.     this API call may be made from a hardware interrupt handler
  8403. SeeAlso: AX=1016h,AX=1117h,AX=DE21h,INT 2F/AX=1685h
  8404. --------Q-15DE18-----------------------------
  8405. INT 15 - DESQview v2.20+ - internal - ???
  8406.     AX = DE18h
  8407.     BP = function number
  8408.         high byte must be 10h
  8409.         low byte is function
  8410.         00h set ???
  8411.             BL = ???  (00h-10h, video mode???)
  8412.             BH = value to store
  8413.         03h set ???
  8414.             BL = ??? (stored in driver)
  8415.         0Ah get ???
  8416.             ES:DI -> 18-byte buffer to hold ???
  8417. Note:    calls video driver (NOP for Hercules driver,probably CGA and MCGA also)
  8418. --------Q-15DE19-----------------------------
  8419. INT 15 - DESQview v2.23+ - "GETCOMMON" - ALLOCATE "COMMON" MEMORY
  8420.     AX = DE19h
  8421.     BX = number of bytes to allocate
  8422. Return: AX = 0000h successful
  8423.         ES:DI -> allocated block
  8424.          nonzero insufficient memory
  8425. Note:    this API call may be made from within a hardware interrupt handler
  8426. SeeAlso: AX=DE0Ch,AX=DE15h,AX=DE1Ah
  8427. --------Q-15DE1A-----------------------------
  8428. INT 15 - DESQview v2.23+ - "PUTCOMMON" - DEALLOCATE "COMMON" MEMORY
  8429.     AX = DE1Ah
  8430.     ES:DI -> previously allocated block
  8431. Return: AX = 0000h (successful)
  8432. Note:    this function may be called from within a hardware interrupt handler
  8433. SeeAlso: AX=DE0Dh,AX=DE19h
  8434. --------Q-15DE1B-----------------------------
  8435. INT 15 - DESQview v2.23+ internal - DECREMENT CRITICAL NESTING COUNT
  8436.     AX = DE1Bh
  8437. Return: nothing
  8438. SeeAlso: AX=101Ch,AX=DE13h,AX=DE1Ch
  8439. --------Q-15DE1C-----------------------------
  8440. INT 15 - DESQview v2.23+ - "ENTERC" - INCREMENT CRITICAL NESTING COUNT
  8441.     AX = DE1Ch
  8442. Return: nothing
  8443. Notes:    similar to AX=101Bh, but begins the critical region without ensuring
  8444.       that DOS is free
  8445.     the official documentation states that this call should be paired with
  8446.       "ENDC" (AX=101Ch); no mention is made of AX=DE1Bh
  8447.     this API call may be made from within a hardware interrupt handler
  8448. SeeAlso: AX=101Bh,AX=101Ch,AX=DE13h,AX=DE1Bh
  8449. --------Q-15DE1D-----------------------------
  8450. INT 15 - DESQview v2.23+ - "PUTKEY" - FAKE USER KEYSTROKES
  8451.     AX = DE1Dh
  8452.     DX = segment of handle for task to receive keystroke
  8453.     BL = character
  8454.     BH = scan code
  8455. Return: AX = 0000h if successful
  8456.        nonzero if receiver's keyboard buffer was full
  8457. Notes:    the key is treated as though the user had pressed it, ignoring any
  8458.       script which may be bound to the key, and using the current field
  8459.       table if the keyboard object is in field processing mode
  8460.     multiple PUTKEYs are seen in the order in which they are executed
  8461. SeeAlso: AX=DE10h
  8462. --------Q-15DE1E-----------------------------
  8463. INT 15 - DESQview v2.23+ - "SCRNINFO" - GET TRUE VIDEO PARAMETERS
  8464.     AX = DE1Eh
  8465. Return: CL = actual number of rows on screen
  8466.     CH = actual number of columns on screen
  8467.     BL = actual video mode (may differ from INT 10/AH=0Fh return) (v2.26+)
  8468. Note:    this API call may be made from a hardware interrupt handler
  8469. SeeAlso: INT 10/AH=0Fh
  8470. --------Q-15DE1F-----------------------------
  8471. INT 15 - DESQview v2.23+ - "DOSUSER" - GET HANDLE OF TASK CURRENTLY USING DOS
  8472.     AX = DE1Fh
  8473. Return: BX = segment of task handle or 0000h if no tasks are using DOS
  8474. Note:    this API call may be made from within a hardware interrupt handler
  8475. SeeAlso: AX=DE13h,INT 21/AH=34h
  8476. --------Q-15DE20-----------------------------
  8477. INT 15 - DESQview v2.26+ - "DISPATCHINT" - INTERRUPT ANOTHER TASK
  8478.     AX = DE20h
  8479.     BX = segment of handle of task to interupt
  8480.     DX:CX -> FAR interrupt routine
  8481.     BP,SI,DI,DS,ES as required by interrupt routine
  8482. Return: nothing
  8483. Notes:    unlike "PGMINT" (AX=1021h), DISPATCHINT may be applied to the task
  8484.       making the DISPATCHINT call
  8485.     multiple "DISPATCHINT" calls are processed in the order in which they
  8486.       were executed
  8487.     the FAR routine is entered with the current ES, DS, SI, DI, and BP
  8488.       values, using the task's internal stack (see AX=101Ah); only SS:SP
  8489.       needs to be preserved
  8490.     this API call may be made from within a hardware interrupt handler
  8491. SeeAlso: AX=1021h,AX=DE2Ah
  8492. --------Q-15DE21-----------------------------
  8493. INT 15 - DESQview v2.26+ - "ASSERTVIR" - CONTROL 386 SCREEN VIRTUALIZATION
  8494.     AX = DE21h
  8495.     BX = new state
  8496.         0000h turn off
  8497.         nonzero turn on
  8498. Return: BX = old state of virtualization
  8499. Notes:    this API call may be made from within a hardware interrupt handler
  8500.     under DV 2.40 and 2.42, this call appears to have no effect and always
  8501.       returns a nonzero value in BX which appears to be the offset within
  8502.       the DV common memory segment of the caller's task object; it may
  8503.       only have an effect within a hardware interrupt handler
  8504. SeeAlso: AX=1117h,AX=DE17h
  8505. --------Q-15DE22-----------------------------
  8506. INT 15 - DESQview v2.26+ - "PROCESSMEM" - GET TASK MEMORY STATUS
  8507.     AX = DE22h
  8508.     DX = segment of task handle
  8509. Return: DX = total amount of memory in paragraphs
  8510.     BX = amount of system memory in paragraphs
  8511.     CX = largest block of system memory available in paragraphs
  8512.     AX = memory flags (see #00552)
  8513. Notes:    if the task handle is a child task, the returned values will be for the
  8514.       process containing the task, rather than the task itself
  8515.     if the process's system memory is swapped out, BX,CX,DX remain
  8516.       unchanged, because the memory usage cannot be determined
  8517. SeeAlso: AX=DE04h,AX=DE05h,AX=DE06h
  8518.  
  8519. Bitfields for DESQview process memory flags:
  8520. Bit(s)    Description    (Table 00552)
  8521.  0    system memory resides in shared memory
  8522.  1    process's memory is swapped out
  8523.  2    process's system memory is swapped out
  8524. --------Q-15DE23-----------------------------
  8525. INT 15 U - DESQview v2.31+ - ???
  8526.     AX = DE23h
  8527.     BX = ??? IRQ number on first PIC?
  8528.     CX = ??? IRQ number on second PIC?
  8529. Return: ???
  8530. Note:    called by QEMM 6.00+
  8531. --------Q-15DE24-----------------------------
  8532. INT 15 - DESQview v2.40+ - "XNEWPROC" - START NEW APPLICATION
  8533.     AX = DE24h
  8534.     BX = length of .DVP data
  8535.     CX = length of ??? string
  8536.     DS:SI -> ??? string
  8537.     ES:DI -> .DVP data (see #00427 at AX=102Ch)
  8538. Return: BX = segment of task handle??? or 0000h on error
  8539. Note:    this call is similar to AX=102Ch except that it can interpret the
  8540.       extended DVP data
  8541. SeeAlso: AX=102Ch
  8542. --------Q-15DE25-----------------------------
  8543. INT 15 - DESQview v2.40+ - "GETDVPATH" - GET DESQview DIRECTORY
  8544.     AX = DE25h
  8545.     ES:DI -> 67-byte buffer for ASCIZ directory name
  8546. Return: ES:DI buffer filled with directory from which DESQview was started
  8547. BUG:    DV 2.42 does not place a terminating NUL at the end of the directory
  8548.       name, so if the buffer is not cleared to zeros before the call,
  8549.       there is no way to tell where the directory name ends.  This bug
  8550.       has been fixed in DV 2.52 (DV/X 1.02)
  8551. SeeAlso: AX=DE2Eh,INT 21/AH=47h
  8552. --------Q-15DE26-----------------------------
  8553. INT 15 - DESQview v2.40+ - "GETFOREGROUND" - GET KEYBOARD FOCUS
  8554.     AX = DE26h
  8555. Return: BX = segment of handle for task with keyboard focus
  8556. Note:    under DESQview/X, the X server always has the keyboard focus unless a
  8557.       "direct" window is active
  8558. SeeAlso: AX=DE2Fh,INT 2F/AX=DE0Ah
  8559. --------Q-15DE27-----------------------------
  8560. INT 15 - DESQview v2.50+ - "ADDINSTANCEDATA" - ADD PER-TASK SAVE/RESTORE AREA
  8561.     AX = DE27h
  8562.     BX = type
  8563.         0000h process
  8564.         0001h task
  8565.     ES:DI -> list of Instance Item Structures (see #00553)
  8566. Return: CF clear if successful
  8567.         AX = ???
  8568.         BX = ???
  8569.     CF set on error
  8570.         AX = error code???
  8571.         0004h invalid BX value
  8572. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8573. SeeAlso: INT 2F/AX=DE08h,INT 2F/AX=DE09h
  8574.  
  8575. Format of DESQview Instance Item Structure [one element of list]:
  8576. Offset    Size    Description    (Table 00553)
  8577.  00h    WORD    length of data area DESQview should save and restore on context
  8578.           switches (0000h = end of list)
  8579.  02h    DWORD    pointer to area to be saved/restored
  8580. --------Q-15DE28-----------------------------
  8581. INT 15 U - DESQview v2.50+ - ???
  8582.     AX = DE28h
  8583.     BX = segment of ??? or 0000h for default
  8584.     ???
  8585. Return: ???
  8586. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8587. SeeAlso: AX=DE2Ah
  8588. --------Q-15DE29BX0000-----------------------
  8589. INT 15 U - DESQview/X - ???
  8590.     AX = DE29h
  8591.     BX = 0000h
  8592.     ???
  8593. Return: CF clear if successful
  8594.         ???
  8595.     CF set on error
  8596. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8597.     under DESQview 2.60, this function and all other subfunctions of
  8598.       AX=DE29h always return CF set, as they are unique to DESQview/X
  8599. --------Q-15DE29BX0001-----------------------
  8600. INT 15 U - DESQview/X - ???
  8601.     AX = DE29h
  8602.     BX = 0001h
  8603.     DX = segment of window handle
  8604. Return: CF clear if successful
  8605.         AX = ???
  8606.         DX = ???
  8607.     CF set on error
  8608. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8609. --------Q-15DE29BX0002-----------------------
  8610. INT 15 U - DESQview/X - ???
  8611.     AX = DE29h
  8612.     BX = 0002h
  8613.     DX = segment of window handle
  8614. Return: CF clear if successful
  8615.         AX = ???
  8616.         DX = ???
  8617.     CF set on error
  8618. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8619. --------Q-15DE29BX0003-----------------------
  8620. INT 15 U - DESQview/X - ???
  8621.     AX = DE29h
  8622.     BX = 0003h
  8623.     DX = segment of window handle
  8624. Return: CF clear if successful
  8625.         ???
  8626.     CF set on error
  8627. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8628. --------Q-15DE29BX0004-----------------------
  8629. INT 15 U - DESQview/X - GET DISPLAY NAME
  8630.     AX = DE29h
  8631.     BX = 0004h
  8632.     CX = size of buffer in bytes
  8633.     DX = segment of window handle
  8634.     ES:DI -> buffer for display name
  8635. Return: CF clear if successful
  8636.         buffer filled with ASCIZ display name (truncated if necessary) or
  8637.           null string if no display
  8638.     CF set on error
  8639. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8640.     the name ":0" refers to the local display
  8641. --------Q-15DE29BX0005-----------------------
  8642. INT 15 U - DESQview/X - ???
  8643.     AX = DE29h
  8644.     BX = 0005h
  8645.     ???
  8646. Return: CF clear if successful
  8647.         ???
  8648.     CF set on error
  8649. Note:    under DESQview 2.60, this function and all other subfunctions of
  8650.       AX=DE29h always return CF set, as they are unique to DESQview/X
  8651. --------Q-15DE2A-----------------------------
  8652. INT 15 - DESQview v2.50+ - "DISPATCHINTAFTERDOS" - INTERRUPT ANOTHER TASK
  8653.     AX = DE2Ah
  8654.     BX = segment of handle for task to interrupt or 0000h for caller
  8655.     DX:CX -> interrupt routine
  8656.     BP,SI,DI,DS,ES as required by interrupt routine
  8657. Return: nothing
  8658. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8659.     this call is the same as AX=DE20h except that it will delay
  8660.       interrupting the specified task until after it has exited DOS
  8661. SeeAlso: AX=1021h,AX=DE20h
  8662. --------Q-15DE2B-----------------------------
  8663. INT 15 - DESQview v2.50+ - "OBJNEXT" - TRAVERSE OBJECT LIST
  8664.     AX = DE2Bh
  8665.     ES:DI -> starting object
  8666.         0000h:0000h for first object in list???
  8667. Return: AX = status
  8668.         0000h successful
  8669.         ES:DI -> next object of same type (window/non-window)
  8670.         0001h failed (ES:DI was not a valid handle)
  8671. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8672.     there are two separate lists, one for window/task objects and one
  8673.       for all other objects
  8674. SeeAlso: AX=1016h,AX=DE2Ah,AX=DE2Ch
  8675. --------Q-15DE2C-----------------------------
  8676. INT 15 - DESQview v2.50+ - "WININFO" - GET WINDOW INFORMATION
  8677.     AX = DE2Ch
  8678.     DX = window information format version (0100h for DESQview 2.5x)
  8679.     BX = segment of window handle or 0000h for default
  8680.     ES:DI -> buffer for window information (see #00554)
  8681. Return: AX = status
  8682.         0000h successful
  8683. Note:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8684. SeeAlso: AX=1000h,AX=1016h,AX=DE01h,AX=DE2Bh
  8685.  
  8686. Format of DESQview window information:
  8687. Offset    Size    Description    (Table 00554)
  8688.  00h    BYTE    task flag: 00h window, 01h task
  8689.  01h    BYTE    process number if owner task
  8690.         00h if non-owner task
  8691.  02h    WORD    segment of owner's handle, 0000h if orphaned
  8692.  04h    WORD    mapping context (see #00416 at AX=1016h)
  8693.  06h    BYTE    task status (see #00555)
  8694.  07h    BYTE    unused
  8695.  08h    WORD    status bits (see #00556)
  8696.  0Ah    BYTE    01h if foreground-only window
  8697.  
  8698. (Table 00555)
  8699. Values for DESQview task status:
  8700.  00h    "Waiting" waiting for input
  8701.  01h    "Idle" keyboard poll limit reached
  8702.  03h    same as 01h
  8703.  04h    "Pausing" INT 15/AX=1000h pause called
  8704.  04h    DV/X direct: user did something to allow task switch
  8705.  05h    "ModeChg" video mode about to be changed
  8706.  06h    "ModeNtf" notify that video mode changed
  8707.  07h    "MoniCh" requested change to other monitor
  8708.  08h    "StartPgm" control relinquished to start new process
  8709.  09h    "MgrCan" made window manager CANCEL command
  8710.  0Ah    "Slicing" time slice expired
  8711.  0Bh    "Exit DOS" notify on DOS calls
  8712.  0Ch    "Enter DOS" process is re-entering DOS
  8713.  0Dh    "Terminate" INT 21/AH=4Ch or task freed
  8714.  0Eh    "BrkNxt" Control-Break pressed
  8715.  0Fh    "MgrCol" keyboard focus taken away
  8716.  10h    "PgmInt" interrupted by API call from another task
  8717.  11h    "BldOpen" call to INT 15/AX=DE01h
  8718.  
  8719. Bitfields for DESQview task status bits:
  8720. Bit(s)    Description    (Table 00556)
  8721.  6    task is freeing another task
  8722.  5    process is being created
  8723.  4    user suspended process
  8724.  3    process suspended itself
  8725.  2    process is resized direct window (suspended)
  8726.  1    process swapped out
  8727.  0    DESQview process
  8728. --------Q-15DE2D-----------------------------
  8729. INT 15 U - DESQview v2.50+ - GET/SET SOCKET HANDLER
  8730.     AX = DE2Dh
  8731.     CX = direction
  8732.         FFFFh set socket handler
  8733.         DX:BX -> FAR function for socket interface
  8734.             must be of the format described under INT 63"DESQview"
  8735.               at #03515
  8736.         other get socket handler
  8737.         Return: DX:BX -> socket handler (see #03515)
  8738. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8739.     the "set" subfunction is normally called only by SOCKET.DVR
  8740. SeeAlso: AX=DE2Eh,INT 63"DESQview",#03515
  8741. --------Q-15DE2E-----------------------------
  8742. INT 15 U - DESQview v2.50+ - SOCKET API
  8743.     AX = DE2Eh
  8744.     DX:BX -> socket record (see #00558)
  8745.         0000h:0000h to create a new socket record
  8746. Return: CX = size of socket record in bytes
  8747.     DX:BX -> socket record which was used
  8748. Notes:    DESQview 2.50-2.52 are distributed as part of DESQview/X v1.0x.
  8749.     socket records are allocated from common memory
  8750.     for Unix compatibility, each socket and connection on a socket is
  8751.       allocated a DOS file handle (referencing an SFT for NUL) which is
  8752.       used on various calls to specify which of possibly multiple
  8753.       connections is to be operated upon
  8754. SeeAlso: AX=DE2Dh,INT 61/AX=0001h/SF=0001h"VINES",INT 63"DESQview"
  8755.  
  8756. (Table 00557)
  8757. Values for DESQview/X socket API function number:
  8758.  0000h    initialize socket???
  8759.  0001h    "gethostname"
  8760.  0002h    "ioctl" check for input
  8761.  0003h    "sleep" delay for specified period
  8762.  0004h    "htons" convert word to network (big-endian) byte order
  8763.  0005h    "select"
  8764.  0006h    "bsd_close"/"so_close" close socket
  8765.  0007h    NOP
  8766.  0008h    "connect" initiate connection on socket
  8767.  0009h    "recv"/"recvfrom" read from socket
  8768.  000Ah    "socket"
  8769.  000Bh    ???
  8770.  000Ch    "gethostbyname"
  8771.  000Dh    "send"/"sendto" write to socket
  8772.  000Eh    ??? (does something to all connections for process)
  8773.  000Fh    "getpid" get process identifier
  8774.  0010h    "gettimeofday"
  8775.  0011h    "bind" assign name to socket
  8776.  0012h    "listen" listen for connections on socket
  8777.  0013h    "accept" accept connection on socket
  8778.  0014h    connect to X server
  8779.  0015h    "gethostbyaddr" get host information for an address
  8780.  0016h    "getprotobyname"
  8781.  0017h    "getprotobynumber"
  8782.  0018h    "getservbyname"
  8783.  0019h    "getservbyport"
  8784.  001Ah    "getsockname" determine name bound to socket
  8785.  001Bh    "getpeername" get name of connected peer
  8786.  001Ch    "getsockopt"/"setsockopt"
  8787.  001Dh    "so_exit"     close all sockets for calling process
  8788.  001Eh    "issock" determine whether file handle references socket
  8789.  001Fh    "so_attach" reattach previously detached socket
  8790.  0020h    "so_detach" temporarily detach socket
  8791.  0021h    "dvpath" get DESQview directory (see also AX=DE24h)
  8792.  0022h    "NewProc" start new application (see also AX=102Ch)
  8793.  0023h    "so_linkup"
  8794.  0024h    "CanonicalPath" canonicalize filename (see also INT 21/AH=60h)
  8795.  0025h    indirect INT 15h call
  8796.  0026h    Network Manager interface
  8797.  0027h    "so_unlink"    close connection from "so_linkup"
  8798.  0028h    "raisepriority"
  8799.  0029h    "lowerpriority"
  8800.  002Ah    "so_private" ???
  8801.  FFFFh    "NetExit" (appears to be a NOP)
  8802.  
  8803. Format of DESQview/X socket record:
  8804. Offset    Size    Description    (Table 00558)
  8805.  00h    WORD    signature F0ADh
  8806.  02h    WORD    function number (see #00557)
  8807.  04h    WORD    returned error code (see #00578)
  8808.  06h    WORD    maximum message size??? (usually 0400h)
  8809.  08h    WORD    PSP segment to use or 0000h if socket not valid
  8810.  0Ah    WORD    scratch space (JFT size)
  8811.  0Ch    DWORD    scratch space (JFT address)
  8812.  10h    DWORD    mailbox handle (initialized by function 0000h)
  8813.  14h    DWORD    timer object handle (initialized by function 0000h)
  8814. ---function 0000h---
  8815.  18h    WORD    (ret) ???
  8816. ---function 0001h---
  8817.  18h    WORD    (ret) status???
  8818.  1Ah 128 BYTEs    (ret) ASCIZ hostname (empty string if not on network)
  8819.  9Ah    WORD    maximum length of hostname to return
  8820. ---function 0002h---
  8821.  18h    WORD    (ret) status
  8822.  1Ah    WORD    socket's file handle
  8823.  1Ch    WORD    IOCTL function
  8824.         05h "FIONREAD" determine available input
  8825.         06h "FIONBIO" set blocking state of socket
  8826.  1Eh    WORD    (return, subfn 05h) number of bytes available for reading
  8827.         (call, subfn 06h) 0000h blocking, nonzero nonblocking
  8828. ---function 0003h---
  8829.  18h  2 BYTEs    unused
  8830.  1Ah    WORD    delay time in seconds
  8831. ---function 0004h---
  8832.  18h    WORD    (ret) result in network (big-endian) byte order
  8833.  1Ah    WORD    value to convert to network byte order
  8834. ---function 0005h---
  8835.  18h    WORD    (ret) number of handles meeting the specified conditions???
  8836.  1Ah    WORD    number of file handles in each bitset
  8837.  1Ch    DWORD    bitset of socket handles to check for readability
  8838.  20h    DWORD    bitset of socket handles to check for writability
  8839.  24h    DWORD    bitset of socket handles to check for errors
  8840.  28h    WORD    timeout in ??? or 0000h to block until some socket ready
  8841.  2Ah    DWORD    ???
  8842.  2Eh    DWORD    ???
  8843. ---function 0006h---
  8844.  18h    WORD    (ret) status: 0000h if successful, FFFFh on error
  8845.  1Ah    WORD    socket's file handle
  8846. ---function 0008h---
  8847.  18h    WORD    (ret) status: 0000h if successful, FFFFh on error
  8848.  1Ah    WORD    socket's file handle
  8849.  1Ch    WORD    0001h if socket name specified, 0000h if not
  8850.  1Eh    WORD    length of socket name
  8851.  20h  N BYTEs    name of socket to which to connect
  8852. ---function 0009h---
  8853.  18h    WORD    (ret) number of bytes actually read, 0000h if connection
  8854.             closed, or FFFFh on error
  8855.  1Ah    WORD    socket's file handle
  8856.  1Ch    WORD    number of bytes to read
  8857.  1Eh    WORD    flags
  8858.  20h    WORD    0000h if no source address desired
  8859.         0001h if source address is to be stored (datagram sockets)
  8860.  22h    WORD    length of source address
  8861.  24h 110 BYTEs    source address
  8862.  92h 1K BYTEs    buffer for data to be read
  8863. ---function 000Ah---
  8864.  18h    WORD    (ret) socket's file handle or FFFFh on error
  8865.  1Ah    WORD    address family (0001h,0002h)
  8866.  1Ch    WORD    socket type
  8867.  1Eh    WORD    protocol
  8868. ---function 000Bh---
  8869.  18h    WORD    (ret) 0001h if ??? or FFFFh on error
  8870.  1Ah    WORD    socket's file handle
  8871.  1Eh    WORD    (call) ???
  8872. ---function 000Ch---
  8873.  18h 128 BYTEs    ASCIZ hostname (special case if empty string or "unix")
  8874.  98h    ???    (ret) packed 'hostent' structure
  8875.  A2h    ???    (ret) ???
  8876. ---function 000Dh---
  8877.  18h    WORD    (ret) number of bytes actually written or FFFFh on error
  8878.  1Ah    WORD    socket's file handle
  8879.  1Ch    WORD    number of bytes to write
  8880.  1Eh    WORD    number of bytes to follow in subsequent writes???
  8881.  20h    WORD    flags
  8882.  22h    WORD    0000h if no destination specified, 0001h if destination present
  8883.  24h    WORD    0001h if broadcast message???, 0000h if not
  8884.         (ignored if no destination specified)
  8885.  26h    WORD    length of destination address
  8886.  28h 110 BYTEs    destination address
  8887.  96h 1K BYTEs    buffer containing data to be written
  8888. ---function 000Eh---
  8889.  no additional fields
  8890. ---function 000Fh---
  8891.  18h    DWORD    (ret) DESQview task handle of calling process
  8892. ---function 0010h---
  8893.  18h    DWORD    (ret) current time
  8894.  1Ch    DWORD    (ret) ???
  8895. ---function 0011h---
  8896.  18h    WORD    (ret) status: 0000h if successful, FFFFh on error
  8897.  1Ah    WORD    socket's file handle
  8898.  1Ch    WORD    length of name
  8899.  1Eh  N BYTEs    buffer for socket name
  8900. ---function 0012h---
  8901.  18h    WORD    (ret) status: 0000h if successful, FFFFh on error
  8902.  1Ah    WORD    socket's file handle
  8903.  1Ch    WORD    maximum backlog of pending connections allowed on socket
  8904. ---function 0013h---
  8905.  18h    WORD    (ret) file handle for new connection or FFFFh on error
  8906.  1Ah    WORD    listen()ing socket's file handle
  8907.  1Ch    WORD    (call) length of buffer for connecting entity's address
  8908.         (ret) actual length of address
  8909.  1Eh  N BYTEs    buffer for connecting entity's address (110 bytes???)
  8910. ---function 0014h---
  8911.  18h    WORD    (ret) socket's file handle or FFFFh on error
  8912.  1Ah  4 BYTEs    (ret) ???
  8913.  1Eh    WORD    (ret) ???
  8914.  20h    WORD    (ret) ???
  8915.  22h 256 BYTEs    ASCIZ X display name
  8916. 122h    ???
  8917. ---function 0015h---
  8918.  18h    WORD    (call) type of address??? (test for 0001h seen)
  8919.  1Ah    WORD    (call) length of buffer for host address
  8920.  1Ch 110 BYTEs    buffer containing ASCIZ host address
  8921.  8Ah    WORD    (ret) offset of official host name
  8922.  8Ch    WORD    (ret) offset of alias list???
  8923.  8Eh    WORD    (ret) address type???
  8924.  90h    WORD    (ret) length of an address in bytes???
  8925.  92h    WORD    (ret) offset of address???
  8926.  9Ah  N BYTEs    (ret) buffer for hostname, alias list, and host address
  8927. ---function 0016h---
  8928.  18h    ???    buffer for ASCIZ protocol name
  8929.  98h    ???
  8930. ---function 0017h---
  8931.  18h    WORD    (call) protocol number
  8932.  1Ah    WORD    (ret) ??? or 0001h
  8933. ---function 0018h---
  8934.  18h 128 BYTEs    buffer containing ASCIZ ???
  8935.  98h 128 BYTEs    buffer containing ASCIZ ???
  8936. 118h    WORD    (ret) ???
  8937. ---function 0019h---
  8938.  18h    WORD    port number
  8939.  1Ah 128 BYTEs    (call) ASCIZ host name
  8940.         (ret) packed servent strctures???
  8941.  9Ah    WORD    (ret) ???
  8942. ---function 001Ah---
  8943.  18h    WORD    (ret) 0000h if successful, FFFFh on error
  8944.  1Ah    WORD    socket's file handle
  8945.  1Ch    WORD    (call) length of buffer for socket name
  8946.         (ret) actual length of socket name
  8947.  1Eh  N BYTEs    buffer for socket name
  8948. ---function 001Bh---
  8949.  18h    WORD    (ret) status: 0000h if successful, FFFFh on error
  8950.  1Ah    WORD    socket's file handle
  8951.  1Ch    WORD    (call) size of buffer for name
  8952.         (ret) actual size of name
  8953.  1Eh  N BYTEs    buffer for peer's name
  8954. ---function 001Ch---
  8955.  18h    WORD    (ret) status: 0000h if successful, FFFFh on error
  8956.  1Ah    WORD    direction: 0000h to get, 0001h to set
  8957.  1Ch    WORD    socket's file handle
  8958.  1Eh    WORD    option level
  8959.  20h    WORD    option name
  8960.  22h    WORD    (call) length of buffer for option value
  8961.         (ret) actual length of option value
  8962.  24h  N BYTEs    buffer for option value
  8963. ---function 001Dh---
  8964.  no additional fields
  8965. ---function 001Eh---
  8966.  18h    WORD    (ret) status: 0000h ??? or 0001h ???
  8967.  1Ah    WORD    file handle which may or may not be a socket
  8968. ---function 001Fh---
  8969.  18h    WORD    (ret) file handle or FFFFh on error
  8970.  1Ah    DWORD    (call) pointer to Socket Context Record (see #00579) of a
  8971.             previously detached socket
  8972. ---function 0020h---
  8973.  18h    WORD    (ret) status: 0000h if successful or FFFFh on error
  8974.  1Ah    WORD    socket's file handle
  8975.  1Ch    DWORD    (ret) pointer to Socket Context Record (see #00579) for
  8976.             the file handle
  8977. ---function 0021h---
  8978.  18h 64 BYTEs    buffer for DESQview startup directory (see AX=DE25h)
  8979. ---function 0022h---
  8980.  18h    DWORD    (ret) task handle of new application
  8981.  1Ch    WORD    size of .DVP data
  8982.  1Eh 129 BYTEs    ASCIZ ???
  8983.  9Fh  N BYTEs    .DVP data (see #00427 at AX=102Ch)
  8984. ---function 0023h---
  8985.  18h    WORD    (ret) ??? or FFFFh on error
  8986.  1Ah    WORD    socket's file handle???
  8987. ---function 0024h---
  8988.  18h    WORD    (ret) DOS error code (see #01680 at INT 21/AH=59h/BX=0000h)
  8989.             0000h if successful
  8990.  1Ah 129 BYTEs    ASCIZ filename/pathname
  8991. 11Bh 129 BYTEs    ASCIZ canonicalized filename/pathname (see INT 21/AH=60h)
  8992. ---function 0025h---
  8993.  18h    WORD    value of AX
  8994.  1Ah    WORD    value of BX
  8995.  1Ch    WORD    (call) value of CX for call if AH value other than 12h
  8996.         (call) number of stack parameters if AH value is 12h
  8997.         (ret) returned CX for calls other than INT 15/AH=12h
  8998.  1Eh    WORD    value of DX
  8999.  20h    WORD    value of DI
  9000.  22h    WORD    value of SI
  9001.  24h    WORD    value of DS
  9002.  26h    WORD    value of ES
  9003.  28h    WORD    (ret) value of FLAGS after call
  9004.  2Ah  N DWORDs    (call) stack parameters for INT 15/AH=12h call
  9005.         (ret) stack results from INT 15/AH=12h call
  9006. ---function 0026h---
  9007.  18h    WORD    (call) Network Manager subfunction (see #00559)
  9008.         (ret) status??? (0000h on error)
  9009.  1Ah    WORD    (call) size of parameter data
  9010.         (ret) size of returned data
  9011.  1Ch  N BYTEs    (call) parameter data required by call (see #00560,#00561,#00577)
  9012.         (ret) result data (see #00570,#00571,#00576)
  9013. ---function 0027h---
  9014.  18h    WORD    (ret) status: 0000h if successful, FFFFh on error
  9015.  1Ah    WORD    socket's file handle
  9016. ---functions 0028h,0029h---
  9017.  18h    WORD    (call) file handle for which to set priority low/high
  9018.             FFFFh to change calling task's priority
  9019. ---function 002Ah---
  9020.  no additional fields
  9021.  
  9022. (Table 00559)
  9023. Values for DESQview/X Network Manager subfunction:
  9024.  0004h    "so_exit"???
  9025.  0005h    "gethostbyname"
  9026.  0006h    "gethostname"
  9027.  0009h    "socket"
  9028.  000Dh    "gethostbyaddr"
  9029.  000Fh    "getprotobyname"
  9030.  0010h    get protocol name for protocol number
  9031.  0011h    "getservbyname"
  9032.  0012h    "getservbyport" (see #00563)
  9033.  0013h    "getsockname"??? (see #00564)
  9034.  0016h    "shutdown" (see #00565)
  9035.  0017h    kill Network Manager
  9036.  0018h    "getpeername"??? (see #00566)
  9037.  0019h    ??? (called by socket function 0000h) (see #00567)
  9038.  001Ah    ??? (see #00568)
  9039.  001Bh    "so_linkup" (see #00569)
  9040.  001Dh    "getnetstatus" get network services (see #00570)
  9041.  001Fh    "getpwuid"
  9042.  0020h    "getpwnam"
  9043.  0021h    "getpwvar"
  9044.  0022h    "crypt"
  9045.  0023h    "so_unlink"
  9046.  0024h    "getlogin" (see #00571)
  9047.  0028h    "sethostent"
  9048.  0029h    "gethostent"
  9049.  002Ah    "soaddhost"
  9050.  002Bh    "soupdatehost"
  9051.  002Ch    "sodeletehost"
  9052.  002Dh    "setservent"
  9053.  002Eh    "getservent"
  9054.  002Fh    "setpwent"
  9055.  0030h    "getpwent" (see #00572)
  9056.  0031h    "sethostpath" (see #00573)
  9057.  0032h    "endservent"
  9058.  0033h    "endhostent"
  9059.  0034h    "getnettype" get IP network number (see #00574)
  9060.  0035h    ??? (pops up Network Manager window)
  9061.  0037h    "getnettimeout" (see #00575)
  9062.  0038h    get machine name and IP address (see #00576)
  9063.  0039h    "getuid" (see #00577)
  9064. ---DV/X v2.0+ ---
  9065.  0041h    "deletepwnam"
  9066.  0045h    "renamepw"
  9067.  
  9068. Format of Function 0026h/Subfunction 000Fh data:
  9069. Offset    Size    Description    (Table 00560)
  9070.  00h  8 BYTEs    (ret) ???
  9071.  
  9072. Format of Function 0026h/Subfunction 0010h data:
  9073. Offset    Size    Description    (Table 00561)
  9074.  00h  2 BYTEs    (ret) ???
  9075.  02h    WORD    (ret) protocol number
  9076.  04h    WORD    (call) protocol number for which to get name
  9077.  06h    WORD    (ret) ???
  9078.  08h    var    (ret) ASCIZ protocol name
  9079.  N    var    (ret) ASCIZ protocol name
  9080.  
  9081. Format of Function 0026h/Subfunction 0011h data:
  9082. Offset    Size    Description    (Table 00562)
  9083.  00h  8 BYTEs    ???
  9084.  08h    var    (ret) ASCIZ protocol name
  9085.     var    (ret) ASCIZ ??? name
  9086.     var    (ret) ASCIZ ??? name
  9087.  
  9088. Format of Function 0026h/Subfunction 0012h data:
  9089. Offset    Size    Description    (Table 00563)
  9090.  00h  8 BYTEs    (ret) ???
  9091.  
  9092. Format of Function 0026h/Subfunction 0013h data:
  9093. Offset    Size    Description    (Table 00564)
  9094.  00h 116 BYTEs    (ret) ???
  9095.  
  9096. Format of Function 0026h/Subfunction 0016h ("shutdown") data:
  9097. Offset    Size    Description    (Table 00565)
  9098.  00h    WORD    (ret) shutdown status (0000h successful, FFFFh error)
  9099.  02h  4 BYTEs    (ret) ???
  9100.  04h    WORD    (call) socket handle
  9101.  06*h    WORD    (call) what (0 = receives, 1 = sends, 2 = both)
  9102.  
  9103. Format of Function 0026h/Subfunction 0018h data:
  9104. Offset    Size    Description    (Table 00566)
  9105.  00h 116 BYTEs    (ret) ???
  9106.  
  9107. Format of Function 0026h/Subfunction 0019h data:
  9108. Offset    Size    Description    (Table 00567)
  9109.  00h  4 BYTEs    (ret) ???
  9110.  04h    DWORD    (ret) task handle of ???
  9111.  
  9112. Format of Function 0026h/Subfunction 001Ah data:
  9113. Offset    Size    Description    (Table 00568)
  9114.  00h 38 BYTEs    (ret) ???
  9115.  
  9116. Format of Function 0026h/Subfunction 001Bh data:
  9117. Offset    Size    Description    (Table 00569)
  9118.  00h 10 BYTEs    (ret) ???
  9119.  
  9120. Format of Function 0026h/Subfunction 001Dh return data [array]:
  9121. Offset    Size    Description    (Table 00570)
  9122.  00h    WORD    ??? or FFFFh if end of array
  9123.  02h  7 BYTEs    ???
  9124.  09h 27 BYTEs    ASCIZ name of service
  9125.  
  9126. Format of Function 0026h/Subfunction 0024h return data:
  9127. Offset    Size    Description    (Table 00571)
  9128.  00h    var    ASCIZ username
  9129.  
  9130. Format of Function 0026h/Subfunction 0030h data:
  9131. Offset    Size    Description    (Table 00572)
  9132.  00h    WORD    (call) UID or 0000h for current user
  9133.         (ret) ???
  9134.  02h    WORD    (ret) UID
  9135.  04h  6 BYTEs    (ret) ???
  9136.  0Ah    var    (ret) ASCIZ username
  9137.     var    (ret) ASCIZ encrypted password
  9138.     var    (ret) ASCIZ initial ("home") directory
  9139.  
  9140. Format of Function 0026h/Subfunction 0031h ("sethostpath") data:
  9141. Offset    Size    Description    (Table 00573)
  9142.  00h   4 BYTEs    ???
  9143.  04h 144 BYTEs    ASCIZ ???
  9144.  
  9145. Format of Function 0026h/Subfunction 0034h data:
  9146. Offset    Size    Description    (Table 00574)
  9147.  00h  1-3 BYTEs IP network number of caller's machine (low byte first)
  9148.  
  9149. Format of Function 0026h/Subfunction 0037h ("getnettimeout") return data:
  9150. Offset    Size    Description    (Table 00575)
  9151.  00h    WORD    (ret) timeout
  9152.  02h  2 BYTEs    (ret) ???
  9153.  
  9154. Format of Function 0026h/Subfunction 0038h return data:
  9155. Offset    Size    Description    (Table 00576)
  9156.  00h    BYTE    ???
  9157.  01h  4 BYTEs    IP address
  9158.  05h    var    ASCIZ machine name
  9159.     ???
  9160.  
  9161. Format of Function 0026h/Subfunction 0039h ("getuid") return data:
  9162. Offset    Size    Description    (Table 00577)
  9163.  00h    WORD    user ID
  9164.  02h  2 BYTEs    ???
  9165. SeeAlso: #00573,#00576
  9166.  
  9167. (Table 00578)
  9168. Values for DESQview/X socket error code:
  9169.  0000h    successful
  9170.  0009h    "BADF" bad file handle
  9171.  000Ch    "ENOMEM" out of memory
  9172.  000Eh    "EFAULT" bad address
  9173.  0016h    "EINVAL" invalid argument
  9174.  0018h    "EMFILE" too many open files
  9175.  0020h    "EPIPE" ??? broken pipe
  9176.  0023h    "EWOULDBLOCK" operation cannot be completed at this time
  9177.  0024h    "EINPROGRESS" operation now in progress
  9178.  0026h    "ENOTSOCK" socket invalid
  9179.  0028h    "EMSGSIZE" message too long to send atomically
  9180.  002Ch    "ESOCKTNOSUPPORT" socket type not supported
  9181.  002Fh    "EAFNOSUPPORT" address family not supp. by protocol fam.
  9182.  0031h    "EDOM" argument too large
  9183.  0038h    "EISCONN" socket is already connected
  9184.  0039h    "ENOTCONN" socket is not connected
  9185.  
  9186. Format of DESQview/X Socket Context Record:
  9187. Offset    Size    Description    (Table 00579)
  9188.  00h    DWORD    pointer to next Socket Context Record, 0000h:0000h if last
  9189.  04h    WORD    SFT index for socket, 00FFh if not connected, FFFFh if detached
  9190.  06h    WORD    PSP segment of owner or 0000h
  9191.  08h    WORD    mapping context of owning window (see #00416 at AX=1016h)
  9192.  0Ah  2 BYTEs    ???
  9193.  0Ch    WORD    address family
  9194.  0Eh    WORD    socket type
  9195.  10h    WORD    protocol
  9196.  12h    WORD    socket state
  9197.         0001h created
  9198.         0002h bound
  9199.         0003h listening???
  9200.         0005h connected
  9201.  14h    DWORD    timer object handle
  9202.  18h    DWORD    object handle (mailbox???)
  9203.  1Ch    DWORD    object handle of parent of above object or 0000h:0000h
  9204.  20h    DWORD    pointer to ??? or 0000h
  9205.  24h  6 BYTEs    ???
  9206.  2Ah    WORD    file handle for socket or FFFFh
  9207.  2Ch  2 BYTEs    ???
  9208.  2Eh    WORD    nonzero if socket nonblocking
  9209. ---network connections only---
  9210.  30h  2 BYTEs    ???
  9211.  32h    WORD    ???
  9212.  34h  4 BYTEs    (big-endian) IP address of remote
  9213.  38h  6 BYTEs    ???
  9214. --------Q-15DE2F-----------------------------
  9215. INT 15 - DESQview v2.50+ - "VIDEONOTIFY" - HAS DIRECT WINDOW BEEN ACTIVE?
  9216.     AX = DE2Fh
  9217. Return: BX = status
  9218.         0001h keyboard focus has been given to a direct window since the
  9219.         last call
  9220.         0000h if not
  9221. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  9222.     Quarterdeck stated that this call would not be available under future
  9223.       versions of DESQview Classic, but it is still present in v2.60
  9224. --------Q-15DE30-----------------------------
  9225. INT 15 - DESQview v2.50+ - "GETDVXVERSION" - GET DESQview/X VERSION
  9226.     AX = DE30h
  9227. Return: BX = version (BH=major, BL=minor) or 0000h if not DESQview/X
  9228. Notes:    DESQview 2.50-2.53 are distributed as part of DESQview/X v1.00-1.10.
  9229.     you must first check the DESQview version to verify that it is 2.50 or
  9230.       greater
  9231. SeeAlso: INT 21/AH=2Bh/CX=4445h
  9232. --------Q-15DE31-----------------------------
  9233. INT 15 - DESQview/X v1.10 - ???
  9234.     AX = DE31h
  9235.     CX = ???
  9236.         0000h ???
  9237.         nonzero ???
  9238.     ???
  9239. Return: ???
  9240. --------b-15DF-------------------------------
  9241. INT 15 - Juko UNIQUE UX BIOS - TURBO MODE CONTROL
  9242.     AH = DFh
  9243.     AL = function
  9244.         00h turn on Turbo mode
  9245.         01h turn off Turbo mode
  9246.         02h set Turbo mode according to hardware switch
  9247. SeeAlso: INT 13/AX=FFFFh
  9248. --------b-15E00F-----------------------------
  9249. INT 15 - Compaq Systempro - MULTIPROCESSOR DISPATCH
  9250.     AX = E00Fh
  9251.     ES:BX -> start of 2nd processor's execution
  9252. Return: AL = status
  9253.         0Fh successful
  9254.         00h failure
  9255. SeeAlso: AX=E10Eh,AX=E200h
  9256. --------b-15E10E-----------------------------
  9257. INT 15 - Compaq Systempro - MULTIPROCESSOR END-OF-DISPATCH
  9258.     AX = E10Eh
  9259.     ES:BX -> start of 2nd processor's execution
  9260. Return: AL = status
  9261.         0Fh successful (halted)
  9262.         00h failure (not halted)
  9263. SeeAlso: AX=E00Fh,AX=E200h
  9264. --------b-15E200-----------------------------
  9265. INT 15 - Compaq Systempro - MULTIPROCESSOR AVAILABLE
  9266.     AX = E200h
  9267. Return: AX bit 15 set if 2nd processor available
  9268. SeeAlso: AX=E00Fh,AX=E10Eh
  9269. --------b-15E4-------------------------------
  9270. INT 15 - Tandy??? - ???
  9271.     AH = E4h
  9272.     AL = subfunction
  9273.         21h, 89h, 8Ah, 8Bh called by 386MAX v6.01
  9274.     DL = ???
  9275. Return: DL = 00h if successful???
  9276. Note:    the section of code in 386MAX which calls these functions also checks
  9277.       whether the ROM BIOS has both Tandy and Phoenix Technologies
  9278.       signatures if these calls fail; the Tandy 1000SL/TL BIOS does not
  9279.       support this function, however, returning the usual CF set/AH=86h for
  9280.       "unsupported function".
  9281. --------b-15E4-------------------------------
  9282. INT 15 - Compaq ROM BIOS 03/08/93 and newer - ???
  9283.     AH = E4h
  9284.     AL = subfunction
  9285.         00h get ???
  9286.         Return: CF clear
  9287.             AH = 00h
  9288.             CX = 0000h
  9289.             BX = ??? (read from [XBDA:0094h])
  9290.         01h,02h unsupported by this ROM version
  9291.         Return: CF set, AH = 86h
  9292.         80h,90h,A0h,B0h,C0h,D0h,E0h,F0h set ???
  9293.         Return: CF clear
  9294.             AH = 00h
  9295.             CX = 0000h
  9296.             BX = ???
  9297.         81h,91h,A1h,B1h,C1h,D1h,E1h,F1h unsupported by 3/8/93&4/8/93 ROMs
  9298.         Return: CF set, AH = 86h
  9299. Notes:    functions 80h/90h/etc. are not supported by the 4/8/93 EISA System ROM
  9300.     these functions are not supported by the 7/26/93 LTE Lite 386 ROM
  9301. --------!---Section--------------------------
  9302.